//whichconstr.cpp #include "whichconst.h" void f(Tails t) { Tails::getOut() << "In: void f(Tails t)" << endl; } void g(Tails & t) { Tails::getOut()<< "In: void g(Tails & t)" << endl; } Tails h() { Tails::getOut()<< "In: Tails h()" << endl; Tails t; return t; } Tails i(Tails t) { Tails::getOut()<< "In: Tails i(Tails t)" << endl; return t; } Tails j(Tails & t) { Tails::getOut()<< "In: Tails j(Tails & t)" << endl; return t; } Tails & k() { Tails::getOut() << "In: Tails & k()" << endl; Tails t; return t; //CW warning: function result is a pointer/reference //to an automatic variable } Tails & m(Tails t) { Tails::getOut() << "In: Tails & m(Tails t)" << endl; return t; } Tails & p(Tails & t) { Tails::getOut() << "In: Tails & p(Tails & t)" << endl; return t; } #define TEST_TAILS #ifdef TEST_TAILS int main() { Tails a; Tails b; b=a; Tails c(a); Tails d=a; a.summary(a.getOut()); Tails::getOut() << "\nvoid f(Tails t)" << "\nf(a) :\n"; f(a); Tails::getOut() << "\nvoid g(Tails & t)" << "\ng(a):\n"; g(a); Tails::getOut() << "\nTails h()" << "\nb=h():\n"; b=h(); Tails::getOut() << "\nTails i(Tails t)" << "\nb=i(a):\n"; b=i(a); Tails::getOut() << "\nTails j(Tails & t)" << "\nb=j(a):\n"; b=j(a); Tails::getOut() << "\nTails & k()" << "\nb=k():\n"; b=k(); Tails::getOut() << "\nTails & m(Tails t)" << "\nb=m(a):\n"; b=m(a); Tails::getOut() << "\nTails & p(Tails & t)" << "\nb=p(a):\n"; b=p(a); Tails::summary(Tails::getOut()); return 0; } #endif