代码之家  ›  专栏  ›  技术社区  ›  Josh Gao

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

  •  2
  • Josh Gao  · 技术社区  · 12 年前

    我遇到了一个关于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的行为是否正确,但没有获得太多见解。这是叮当作响的虫子吗?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Ben Voigt    12 年前

    《标准》确实这么说

    friend baz ::test(bar &);
    

    friend baz::test(bar &);
    

    是等效的。

    然而,我认为它们很可能都应该编译。