バグであるかどうかにかかわらず、clang で奇妙な問題が発生しています。
次のスニペットは、clang 4.2 ではコンパイルに失敗しますが、gcc ではコンパイルに失敗します。これは、"baz::test" を戻り値の型として解析しているためです。
typedef int baz;
namespace foo { class bar; }
baz test(foo::bar &);
namespace foo {
class bar {
private:
int f;
friend baz ::test(bar &);
};
}
friend int ::test(bar &)
と同様にコンパイルされますfriend baz (::test)(bar &)
。
私は、clang の動作が正しいかどうかを確認するために、標準を少しざっと調べましたが、多くの洞察は得られませんでした。これはclangのバグですか?