// RUN: clang-cc -fsyntax-only -verify %s

// Obj-C string literal expressions
template <typename T> struct StringTest {
  void f() {
    (void)@"Hello";
  }
};

template struct StringTest<int>;
template struct StringTest<double>;

// @selector expressions
template <typename T> struct SelectorTest {
  SEL f() {
    return @selector(multiple:arguments:);
  }
  SEL f2() {
    return @selector(multiple:arguments:);
  }
};

template struct SelectorTest<int>;
template struct SelectorTest<double>;

// @protocol expressions
@protocol P
@end

template <typename T> struct ProtocolTest {
  void f() {
    (void)@protocol(P);
  }
};

template struct ProtocolTest<int>;
template struct ProtocolTest<double>;

// @encode expressions
template <typename T> struct EncodeTest {
  static const char *encode(T t) { 
    return @encode(T);
  }
};

template struct EncodeTest<int>;
template struct EncodeTest<double>;
