Home | History | Annotate | Download | only in SemaTemplate
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 // PR5426 - the non-dependent obj would be fully processed and wrapped in a
      4 // CXXConstructExpr at definition time, which would lead to a failure at
      5 // instantiation time.
      6 struct arg {
      7   arg();
      8 };
      9 
     10 struct oldstylemove {
     11   oldstylemove(oldstylemove&);
     12   oldstylemove(const arg&);
     13 };
     14 
     15 template <typename T>
     16 void fn(T t, const arg& arg) {
     17   oldstylemove obj(arg);
     18 }
     19 
     20 void test() {
     21   fn(1, arg());
     22 }
     23 
     24 struct X0 { };
     25 
     26 struct X1 {
     27   explicit X1(const X0 &x0 = X0());
     28 };
     29 
     30 template<typename T>
     31 void f0() {
     32   X1 x1;
     33 }
     34 
     35 template void f0<int>();
     36 template void f0<float>();
     37 
     38 struct NonTrivial {
     39   NonTrivial();
     40   ~NonTrivial();
     41 };
     42 
     43 template<int N> void f1() {
     44   NonTrivial array[N];
     45 }
     46 template<> void f1<2>();
     47