// { dg-do run } // GROUPS passed destructors #include int destruct = 0; class bla { public: inline bla(const char * jim) { ; } inline ~bla() { destruct++; if (destruct == 2) printf ("PASS\n");} }; class ulk { public: inline ulk() {} inline ~ulk() {} void funk(const bla & bob) { ;} // ^ interestingly, the code compiles right if // this & is deleted (and therefore the parameter // passed as value) }; int main() { ulk dumm; dumm.funk(bla("laberababa")); // this compiles correctly dumm.funk((bla)"laberababa"); // this produces incorrect code - // the temporary instance of // the class "bla" is constructed // but never destructed... }