From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Vinokur To: help-gcc@gnu.org Subject: __PRETTY_FUNCTION__, functions and templates Date: Sat, 01 Apr 2000 00:00:00 -0000 Message-ID: <84st15$1uh$1@nnrp1.deja.com> References: <386da233.0@news.tm.net.my> <84n59m$daj$1@nnrp1.deja.com> <386fac89@eeyore.callnetuk.com> <84pbp4$j4t$1@nnrp1.deja.com> <84pus001rnr@enews2.newsguy.com> X-SW-Source: 2000-q1/msg00036.html Message-ID: <20000401000000.AgAbT7aoIFLLHeF3Jx6X9hBiDUVoW_C4nr3LIWBdgh8@z> In article < 84pus001rnr@enews2.newsguy.com >, "Johnny Favorite (it means \"Writhing Tentacle of Death\")" wrote: > Alex Vinokur wrote: > > 3. __PRETTY_FUNCTION__ > > --FUNCTION__ > > Since your other two examples were pretty cool-sounding I have to ask about > this one. What the heck does __PRETTY_FUNCTION__ do? > > Here is an example. Alex //######################################################### //------------------- C++ code : BEGIN ------------------- #include #include //========================================== //------------------------------------------ void foo1 () { cout << __PRETTY_FUNCTION__ << endl; } //------------------------------------------ int foo2 (const string& s1_1, char c1_i) { cout << __PRETTY_FUNCTION__ << endl; return 0; } //------------------------------------------ template void foo3 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; } //------------------------------------------ template void foo4 () { cout << __PRETTY_FUNCTION__ << endl; } //------------------------------------------ template S0 foo5 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; return S0 (); } //========================================== class AAA { public : //-------------------------- void fooAAA1_1 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- void fooAAA1_2 () const { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- static void fooAAA1_3 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- int fooAAA2 (const string& s1_1, char c1_i) { cout << __PRETTY_FUNCTION__ << endl; return 0; } //-------------------------- template void fooAAA3 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- template void fooAAA4 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- template S0 fooAAA5 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; return S0 (); } }; //========================================== template class BBB { public : //-------------------------- void fooBBB1_1 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- void fooBBB1_2 () const { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- static void fooBBB1_3 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- int fooBBB2 (const string& s1_1, char c1_i) { cout << __PRETTY_FUNCTION__ << endl; return 0; } //-------------------------- template void fooBBB3 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- template void fooBBB4 () { cout << __PRETTY_FUNCTION__ << endl; } //-------------------------- template S0 fooBBB5 (const S1& a1_i, S2& a2_i, S3 a3_i) { cout << __PRETTY_FUNCTION__ << endl; return S0 (); } }; //========================================== class XXX {}; class YYY {}; class ZZZ {}; //========================================== int main () { char char_value = 'Z'; int int_value = 123; string string_value = "ABCDE"; XXX XXX_value; YYY YYY_value; //=============================== cout << endl; foo1 (); foo2 (string_value, char_value); foo3 (string_value, char_value, XXX_value); foo3 (YYY_value, char_value, XXX_value); foo4 (); foo4 (); foo5 (string_value, char_value, XXX_value); foo5 (char_value, int_value, XXX_value); //=============================== cout << endl; AAA aaa; aaa.fooAAA1_1 (); aaa.fooAAA1_2 (); aaa.fooAAA1_3 (); aaa.fooAAA2 (string_value, char_value); aaa.fooAAA3 (string_value, char_value, XXX_value); aaa.fooAAA3 (YYY_value, char_value, XXX_value); aaa.template fooAAA4 (); aaa.template fooAAA4 (); aaa.template fooAAA5 (string_value, char_value, XXX_value); aaa.template fooAAA5 (char_value, int_value, XXX_value); //=============================== cout << endl; BBB bbb1; bbb1.fooBBB1_1 (); bbb1.fooBBB1_2 (); bbb1.fooBBB1_3 (); bbb1.fooBBB2 (string_value, char_value); bbb1.fooBBB3 (string_value, char_value, XXX_value); bbb1.fooBBB3 (YYY_value, char_value, XXX_value); bbb1.template fooBBB4 (); bbb1.template fooBBB4 (); bbb1.template fooBBB5 (string_value, char_value, XXX_value); bbb1.template fooBBB5 (char_value, int_value, XXX_value); //=============================== cout << endl; BBB bbb2; bbb2.fooBBB1_1 (); bbb2.fooBBB1_2 (); bbb2.fooBBB1_3 (); bbb2.fooBBB2 (string_value, char_value); bbb2.fooBBB3 (string_value, char_value, XXX_value); bbb2.fooBBB3 (YYY_value, char_value, XXX_value); bbb2.template fooBBB4 (); bbb2.template fooBBB4 (); bbb2.template fooBBB5 (string_value, char_value, XXX_value); bbb2.template fooBBB5 (char_value, int_value, XXX_value); //=============================== cout << endl; bbb2.template fooBBB5 (bbb1, aaa, bbb2); return 0; } //------------------- C++ code : END ---------------------- //######################################################### //------------------- Running Results : BEGIN ------------- void foo1() int foo2(const class string &, char) void foo3(const class string &, char &, class XXX) void foo3(const class YYY &, char &, class XXX) void foo4() void foo4() int foo5(const class string &, char &, class XXX) class YYY foo5(const char &, int &, class XXX) void AAA::fooAAA1_1() void AAA::fooAAA1_2() const static void AAA::fooAAA1_3() int AAA::fooAAA2(const class string &, char) void AAA::fooAAA3(const class string &, char &, class XXX) void AAA::fooAAA3(const class YYY &, char &, class XXX) void AAA::fooAAA4() void AAA::fooAAA4() int AAA::fooAAA5(const class string &, char &, class XXX) class YYY AAA::fooAAA5(const char &, int &, class XXX) void BBB::fooBBB1_1() ### Attention ### void BBB::fooBBB1_2() const ### Attention ### static void BBB::fooBBB1_3() ### Attention ### int BBB::fooBBB2(const class string &, char) ### Attention ### void BBB::fooBBB3(const class string &, char &, class XXX) void BBB::fooBBB3(const class YYY &, char &, class XXX) void BBB::fooBBB4() void BBB::fooBBB4() int BBB::fooBBB5(const class string &, char &, class XXX) class YYY BBB::fooBBB5(const char &, int &, class XXX) void BBB::fooBBB1_1() ### Attention ### void BBB::fooBBB1_2() const ### Attention ### static void BBB::fooBBB1_3() ### Attention ### int BBB::fooBBB2(const class string &, char) ### Attention ### void BBB::fooBBB3(const class string &, char &, class XXX) void BBB::fooBBB3(const class YYY &, char &, class XXX) void BBB::fooBBB4() void BBB::fooBBB4() int BBB::fooBBB5(const class string &, char &, class XXX) class YYY BBB::fooBBB5(const char &, int &, class XXX) class ZZZ BBB::fooBBB5, AAA, BBB>(const class BBB &, class AAA &, class BBB) //------------------- Running Results : END --------------- //######################################################### //------------------- Environment ------------------------- g++ -v : gcc version egcs-2.91.57 19980901 (egcs-1.1 release) uname -sr : SunOS 5.6 //--------------------------------------------------------- //######################################################### Sent via Deja.com http://www.deja.com/ Before you buy.