| // RUN: %clang_cc1 -fsyntax-only -verify %s | 
 |  | 
 | // PR5426 - the non-dependent obj would be fully processed and wrapped in a | 
 | // CXXConstructExpr at definition time, which would lead to a failure at | 
 | // instantiation time. | 
 | struct arg { | 
 |   arg(); | 
 | }; | 
 |  | 
 | struct oldstylemove { | 
 |   oldstylemove(oldstylemove&); | 
 |   oldstylemove(const arg&); | 
 | }; | 
 |  | 
 | template <typename T> | 
 | void fn(T t, const arg& arg) { | 
 |   oldstylemove obj(arg); | 
 | } | 
 |  | 
 | void test() { | 
 |   fn(1, arg()); | 
 | } | 
 |  | 
 | struct X0 { }; | 
 |  | 
 | struct X1 { | 
 |   explicit X1(const X0 &x0 = X0()); | 
 | }; | 
 |  | 
 | template<typename T> | 
 | void f0() { | 
 |   X1 x1; | 
 | } | 
 |  | 
 | template void f0<int>(); | 
 | template void f0<float>(); | 
 |  | 
 | struct NonTrivial { | 
 |   NonTrivial(); | 
 |   ~NonTrivial(); | 
 | }; | 
 |  | 
 | template<int N> void f1() { | 
 |   NonTrivial array[N]; | 
 | } | 
 | template<> void f1<2>(); |