1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -x c++-header %s -emit-pch -o %t.pch 2*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -x c++ /dev/null -include-pch %t.pch 3*67e74705SXin Li class move_only { move_only(const move_only&) = delete; move_only(move_only&&); }; 4*67e74705SXin Li struct sb { 5*67e74705SXin Li move_only il; 6*67e74705SXin Li sb(); 7*67e74705SXin Li sb(sb &&); 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li template<typename T> T make(); doit(decltype(T (make<const T &> ())) *)11*67e74705SXin Litemplate<typename T> void doit(decltype(T(make<const T&>()))*) { T(make<const T&>()); } doit(...)12*67e74705SXin Litemplate<typename T> void doit(...) { T(make<T&&>()); } later()13*67e74705SXin Litemplate<typename T> void later() { doit<T>(0); } 14*67e74705SXin Li fn1()15*67e74705SXin Livoid fn1() { 16*67e74705SXin Li sb x; 17*67e74705SXin Li later<sb>(); 18*67e74705SXin Li } 19