2013-03-28 87 views
2

我遇到了一个奇怪的问题,可能是也可能不是bug。函数名称的全局名称空间说明符用typedef正确解析?

下面的代码片段无法在叮当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的行为是否正确,而没有深入了解。这是叮当声中的错误吗?

回答

1

标准不说,

friend baz ::test(bar &); 

friend baz::test(bar &); 

是等价的。

但是,我认为他们应该都可以编译。

相关问题