事前定義済みの ID __func__ を使用すると、関数名をその関数内で 使用することができます。各関数定義の左中括弧の直後に、__func__ がコンパイラーによって暗黙的に宣言されます。これによる振る舞いは、次の宣言が行われた場合と 同じになります。
static const char __func__[] = "function-name";
ここで、function-name はこの ID を字句として含んでいる関数の名前です。 この関数名はマングルされません。
この ID が assert マクロとともに使用されると、このマクロは標準エラー・ストリーム にこの ID を含んでいる関数の名前を追加します。
C++ は、C99 と互換性を持たせるための言語拡張として、
事前定義済みの ID __func__ をサポートしています。
関数名はエンクロージング・クラス名または関数名で修飾されます。 例えば、foo は、C クラスのメンバー関数です。 foo の事前定義済み ID は C::foo です。foo が main の本体内で定義されている場合は、foo の 事前定義済み ID は main::C::foo になります。
テンプレート関数またはメンバー関数の名前は、 インスタンス化された型を反映しています。 例えば、int でインスタンス化されたテンプレート関数 foo の事前定義済み ID です。
template<classT> void foo()
は、foo<int> です。
関連参照