C 標準では _ _ func _ _ value が常に囲んでいる関数の名前であることが保証されているのに、C++ (もちろん C++11 のことです) では実装定義の任意の文字列 (たとえば、パラメータなしの関数 foo がある場合、「Some string fdgdg asdfs fsdf sd」のようなものを取得できます)?
ISO/IEC 9899:2011
6.4.2.2 事前定義された識別子
セマンティクス
1 識別子 _ _ func _ _ は、各関数定義の左中括弧の直後に宣言 static const char _ func _ [] = "function-name";のように、翻訳者によって暗黙的に宣言されるものとします。function-name は字句的に囲んでいる関数の名前です。
ISO/IEC 14882:2011
8.4.1 一般 [dcl.fct.def.general]
8 関数ローカルの定義済み変数 _ _ func _ _ は、静的 const char _ _ func _ _ [] = "関数名 "; という形式の定義であるかのように定義されます。function-name は実装定義の文字列です。そのような変数が、プログラム内の他のオブジェクトのアドレスとは異なるアドレスを持つかどうかは指定されていません。
そして、これの理由は何ですか?現在の関数名を取得できない場合、「不明」のようなものを返しますか?