2

バグであるかどうかにかかわらず、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のバグですか?

4

1 に答える 1

1

スタンダードはそう言っている

friend baz ::test(bar &);

friend baz::test(bar &);

同等です。

ただし、両方ともコンパイルする必要がある可能性が高いと思います。

于 2013-03-28T00:17:46.463 に答える