c++ - 使用 typedef 错误解析函数名称的全局 namespace 说明符?

标签 c++ clang language-lawyer

我遇到了一个奇怪的 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 中的错误吗?

最佳答案

标准确实这么说

friend baz ::test(bar &);

friend baz::test(bar &);

是等价的。

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

关于c++ - 使用 typedef 错误解析函数名称的全局 namespace 说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671945/

相关文章:

c++ - 在 C++ 中将 std::minus 专门用于用户定义类型是否合法?

c++ - 如何抑制函数参数的弃用警告?

c++ - 对于 CLang 中的 enable_if 错误(错误 11723)是否有更好的解决方法?

java - 如何判断一个对象是否是 vector

c++ - 使用 select() 和 fgets() 从串行端口访问信息

c++ - 我可以信任代表整数的 float 或 double 来保持精度吗?

c++ - 将局部变量分类为 C++11 之前的谓词

ios - 使用 Clang 而不是 gcc 在 iOS 的 OS X 上交叉编译 OpenSSL 时出错

c - C 中的继承和方法重写 - 如何使其定义行为

c++ - 作为抽象,C++ 是否支持 "bits"表示两个以上值之一?