【问题标题】:Global namespace specifier for function names parsing incorrectly with typedefs?使用 typedef 错误解析函数名称的全局命名空间说明符?
【发布时间】:2013-03-28 00:10:29
【问题描述】:

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

以下 sn-p 在 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中的错误吗?

【问题讨论】:

    标签: c++ clang language-lawyer


    【解决方案1】:

    标准确实这么说

    friend baz ::test(bar &);
    

    friend baz::test(bar &);
    

    是等价的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2016-08-03
      • 2011-04-21
      • 2013-11-19
      • 2012-11-07
      • 2019-09-13
      相关资源
      最近更新 更多