函数名称的全局名称空间说明符使用typedef解析不正确?

时间:2013-03-28 00:10:30

标签: c++ clang language-lawyer

我遇到了一个奇怪的问题,因为clang可能是也可能不是bug。

以下片段无法在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中的错误吗?

1 个答案:

答案 0 :(得分:1)

标准确实说

friend baz ::test(bar &);

friend baz::test(bar &);

是等价的。

但是,我认为它们可能都应该编译。