// 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 struct S { S() { } S(T t); }; template struct S; void f() { S s1; S s2(10); } namespace PR7184 { template void f() { typedef T type; void g(int array[sizeof(type)]); } template void f(); } namespace UsedAttr { template 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(); // expected-note{{instantiation of}} } } namespace PR9654 { typedef void ftype(int); template ftype f; void g() { f(0); } } namespace AliasTagDef { template 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(); } namespace PR10273 { template void (f)(T t) {} void g() { (f)(17); } } namespace rdar15464547 { class A { A(); }; template class B { public: static void meth1(); static void meth2(); }; A::A() { extern int compile_time_assert_failed; B::meth2(); } template void B::meth1() { extern int compile_time_assert_failed; } template void B::meth2() { extern int compile_time_assert_failed; } }