// 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; } }