2 // { dg-options "-std=c++14 -fgnu-tm" }
7 virtual void f() transaction_safe;
8 virtual ~B() transaction_safe_dynamic;
13 void f() override { } // ok
14 ~D1() override { } // ok
18 void f() override { std::cout << "D2::f" << std::endl; } // { dg-error "" "transaction-safe f has transaction-unsafe definition" }
19 ~D2() override { std::cout << "~D2" << std::endl; } // ok
30 b1.f(); // ok, calls D1::f()
31 delete b2; // undefined behavior: calls unsafe destructor of D2
32 } // { dg-error "" "destructor of D2 is not transaction-safe" }