// { dg-do run } // GROUPS passed destructors #include int destruct = 0; class bla { public: inline bla(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... }