diff --git a/lib/rouge/demos/objective_cpp b/lib/rouge/demos/objective_cpp new file mode 100644 index 0000000000..9b6890fc68 --- /dev/null +++ b/lib/rouge/demos/objective_cpp @@ -0,0 +1,17 @@ +@import Foundation; +#import +#include + +@interface IntegerArray : NSObject { + std::vector _numbers; +} +@property(readonly) NSUInteger count; + +- (instancetype)initWithNumbers:(NSUInteger *)numbers count:(NSUInteger)count; +- (NSUInteger)numberAtIndex:(NSUInteger)index; +@end + +int main(int argc, char **argv) { + auto numbers = std::array{1, 2, 3}; + NSLog(@"%@", [[IntegerArray alloc] initWithNumbers:numbers.data() count:numbers.size()]); +} diff --git a/spec/visual/samples/objective_cpp b/spec/visual/samples/objective_cpp new file mode 100644 index 0000000000..d0b7596c87 --- /dev/null +++ b/spec/visual/samples/objective_cpp @@ -0,0 +1,59 @@ +@import Foundation; +#include +#include +#import + +@class ForwardDeclare; + +@interface BaseClass : NSObject +- (instancetype)initWithForwardDeclare(ForwardDeclare *)ForwardDeclare NS_DESIGNATED_INITIALIZER; +@end + +NS_ASSUME_NONNULL_BEGIN + +@interface GenericClass<__covariant Type : id> : NSObject { + std::unique_ptr _storage; +} + +- (void)takesABlock:(void * (^_Nullable)(NSString *, T *, ...))block __attribute__((deprecated)); +@end + +@implementation GenericClass { + @private + struct { + int a; + NSArray b; + } _moreStuff; +} +@end + +template +auto takesALambda(GenericClass *generic, Lambda lambda) -> decltype(generic.class) { + [generic takesABlock:^(@"Hello, world!", new T(), 3) { + lambda(@{ + @"A" : @YES, + @"literal" : @1, + @"test" : @[ reinterpret_cast(generic) ], + }) + }]; + return generic.class; +} + +NS_ASSUME_NONNULL_END + +void function() { + static_assert(sizeof(id) == 8, "ILP static assert"); + auto result = takesALambda([GenericClass new], [&](NSDictionary things) { + [things ? things : [BaseClass initWithForwardDeclare:ForwardDeclare.sharedForwardDeclare] + keysSortedByValueUsingSelector:@selector(class)]; + }); + @try { + throw throw std::exception(); + } + @catch (NSException *exception) { + std::cout << std::string(exception.description.UTF8String) << std::endl; + } +} + +template +explicit thread(F &&f, Args &&... args);