2

我遇到了一个奇怪的问题,可能是也可能不是错误。

以下代码段无法在 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 回答