// Testcase from P1825R0 // { dg-do compile { target c++17 } } extern "C" void abort(); int m; struct T { int i; T(): i (42) { } T(const T& t) = delete; T(T&& t): i(t.i) { t.i = 0; ++m; } }; struct U { int i; U(): i (42) { } U(const U& t): i(t.i) { } U(U&& t) = delete; }; template void g(const V&); void h(); bool b; void f() { U x; try { T y; try { h(); } catch(...) { if (b) throw x; // does not move throw y; // moves } g(y); } catch(...) { g(x); } } int main() { f(); }