// { dg-do run } // Test for proper handling of temporaries in ?: exprs. extern "C" int printf (const char *, ...); int c = 0, d = 0; class A { public: A() { ++c; } A(const A&) { ++c; } ~A() { ++d; } }; A f (const A& a) { return (c ? A() : A()); } int main() { { f (c ? A() : A()); } printf ("%d %d\n", c, d); return c != d || c != 2; }