GCC の __PRETTY_FUNCTION__ 識別子

C++11 では __func__ という識別子が追加され、関数名が文字列で取得する事が出来ます。

#include <iostream>

namespace my{

template<typename T, typename U>
auto
plus(T a, U b){
    // 現在の関数の名前を取得できる
    std::cout << __func__ << std::endl;
    return a + b;
}

}

int
main(){
    std::cout << my::plus(1, 2) << std::endl;
    return 0;
}
/*
output:
plus
3
*/

GCC__PRETTY_FUNCTION__ 識別子

__func__ 識別子では『関数の名前』しか取得出来ません。
しかし、GCC の言語拡張である __PRETTY_FUNCTION__ を使用すると更に詳細な値を取得する事が出来ます。

#include <iostream>

namespace my{

template<typename T, typename U>
auto
plus(T a, U b){
    std::cout << __func__ << std::endl;
    std::cout << __PRETTY_FUNCTION__ << std::endl;
    return a + b;
}

}

int
main(){
    std::cout << my::plus(1, 2) << std::endl;
    std::cout << my::plus(3.14, 2.1) << std::endl;
    return 0;
}
/*
output:
auto my::plus(T, U) [T = int, U = int]
3
auto my::plus(T, U) [T = double, U = double]
5.24
*/

こんな感じでテンプレート引数なんかも出力してくれるのでデバッグする時に便利そう。
ただし、コンパイラ依存なので使用する場合は注意する必要があります。