Monday, June 20, 2011


C++ 2011 and __func__



So what happens to __func__ in different scopes? How about GCC's extension for pretty function names?

#include <iostream>
using namespace std;

namespace
{
void f()
{
auto func = []()->const char *{ return(__func__); };
auto func2 = []()->const char *{ return(__PRETTY_FUNCTION__); }; //GCC extension

cout << func() << '\n'
<< func2() << '\n'
<< __func__ << '\n'
<< __PRETTY_FUNCTION__ << endl;
}
}

int main()
{
f();
cout << __func__ << '\n'
<< __PRETTY_FUNCTION__ << endl;

return(0);
}



Output:

/tmp> g++-4.5 -Wall -o test test.cpp -std=c++0x
/tmp> ./test
operator()
<unnamed>::f()::<lambda()>
f
void<unnamed>::f()
main
int main()
/tmp>

/tmp> g++-4.6 -Wall -o test test.cpp -std=c++0x
/tmp> ./test
operator()
{anonymous}::f()::<lambda()>
f
void {anonymous}::f()
main
int main()
/tmp>

3 comments:

henke37 said...

You got me there, I have no idea what the top two tests are supposed to mean.

And here I thought that I knew how c++ syntax looks like.

ahihi said...
This comment has been removed by the author.
ahihi said...

Thanks for sharing, great post!

Áo khoác Đà Lạt chuyên sỉ và lẻ áo khoác áo khoác nam với giá ưu đãi nhất 2020. Luôn cập nhật mẫu mới chất lượng và dày ấm nhất kể cả với thời tiết lạnh giá các nước có du học sinh và xuất khẩu lao động. Aokhoacdalat.com được đồng hành cùng các bạn!!!!