// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++11 -fsyntax-only -verify %s class X { X(const X&); public: X(); X(X&&); }; X return_by_move(int i, X x) { X x2; if (i == 0) return x; else if (i == 1) return x2; else return x; } void throw_move_only(X x) { X x2; throw x; throw x2; } namespace PR10142 { struct X { X(); X(X&&); X(const X&) = delete; // expected-note 2{{'X' has been explicitly marked deleted here}} }; void f(int i) { X x; try { X x2; if (i) throw x2; // okay throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}} } catch (...) { } } template<typename T> void f2(int i) { T x; try { T x2; if (i) throw x2; // okay throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}} } catch (...) { } } template void f2<X>(int); // expected-note{{in instantiation of function template specialization 'PR10142::f2<PR10142::X>' requested here}} }