| // RUN: %clang_cc1 -fsyntax-only -verify %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s |
| |
| template <typename T> struct S { |
| S() { } |
| S(T t); |
| }; |
| |
| template struct S<int>; |
| |
| void f() { |
| S<int> s1; |
| S<int> s2(10); |
| } |
| |
| namespace PR7184 { |
| template<typename T> |
| void f() { |
| typedef T type; |
| void g(int array[sizeof(type)]); |
| } |
| |
| template void f<int>(); |
| } |
| |
| namespace UsedAttr { |
| template<typename T> |
| void __attribute__((used)) foo() { |
| T *x = 1; // expected-error{{cannot initialize a variable of type 'int *' with an rvalue of type 'int'}} |
| } |
| |
| void bar() { |
| foo<int>(); // expected-note{{instantiation of}} |
| } |
| } |
| |
| namespace PR9654 { |
| typedef void ftype(int); |
| |
| template<typename T> |
| ftype f; |
| |
| void g() { |
| f<int>(0); |
| } |
| } |
| |
| namespace AliasTagDef { |
| template<typename T> |
| T f() { |
| using S = struct { |
| #if __cplusplus <= 199711L |
| // expected-warning@-2 {{alias declarations are a C++11 extension}} |
| #endif |
| T g() { |
| return T(); |
| } |
| }; |
| return S().g(); |
| } |
| |
| int n = f<int>(); |
| } |
| |
| namespace PR10273 { |
| template<typename T> void (f)(T t) {} |
| |
| void g() { |
| (f)(17); |
| } |
| } |
| |
| namespace rdar15464547 { |
| class A { |
| A(); |
| }; |
| |
| template <typename R> class B { |
| public: |
| static void meth1(); |
| static void meth2(); |
| }; |
| |
| A::A() { |
| extern int compile_time_assert_failed; |
| B<int>::meth2(); |
| } |
| |
| template <typename R> void B<R>::meth1() { |
| extern int compile_time_assert_failed; |
| } |
| |
| template <typename R> void B<R>::meth2() { |
| extern int compile_time_assert_failed; |
| } |
| } |