70 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 3// Obj-C string literal expressions4template <typename T> struct StringTest {5 void f() {6 (void)@"Hello";7 }8};9 10template struct StringTest<int>;11template struct StringTest<double>;12 13// @selector expressions14template <typename T> struct SelectorTest {15 SEL f() {16 return @selector(multiple:arguments:);17 }18 SEL f2() {19 return @selector(multiple:arguments:);20 }21};22 23template struct SelectorTest<int>;24template struct SelectorTest<double>;25 26// @protocol expressions27@protocol P28@end29 30template <typename T> struct ProtocolTest {31 void f() {32 (void)@protocol(P);33 }34};35 36template struct ProtocolTest<int>;37template struct ProtocolTest<double>;38 39// @encode expressions40template <typename T> struct EncodeTest {41 static const char *encode(T t) { 42 return @encode(T);43 }44};45 46template struct EncodeTest<int>;47template struct EncodeTest<double>;48template struct EncodeTest<wchar_t>;49 50// @() boxing expressions.51template <typename T> struct BoxingTest {52 static id box(T value) {53 return @(value); // expected-error {{illegal type 'int *' used in a boxed expression}} \54 // expected-error {{illegal type 'long double' used in a boxed expression}}55 }56};57 58@interface NSNumber59+ (NSNumber *)numberWithInt:(int)value;60@end61 62@interface NSString63+ (id)stringWithUTF8String:(const char *)str;64@end65 66template struct BoxingTest<int>;67template struct BoxingTest<const char *>;68template struct BoxingTest<int *>; // expected-note {{in instantiation of member function 'BoxingTest<int *>::box' requested here}}69template struct BoxingTest<long double>; // expected-note {{in instantiation of member function 'BoxingTest<long double>::box' requested here}}70