当前位置:  开发笔记 > 编程语言 > 正文

VS2015和clang编译此代码,但g ++拒绝它.哪一个是正确的?

如何解决《VS2015和clang编译此代码,但g++拒绝它.哪一个是正确的?》经验,为你挑选了1个好方法。



1> Ben Voigt..:

您引用的这部分比您强调的注释更明确:

友元声明本身不会使名称对非限定查找([basic.lookup.unqual])或限定查找([basic.lookup.qual])可见.

您的定义依赖于限定查找来查找已在命名空间内声明的函数.但是名称对于限定查找是不可见的.该代码应该被拒绝.

这是一个相关规则,见第8.3节[dcl.meaning]:

当declarator-id被限定时,声明应引用先前声明的限定符所引用的类或命名空间的成员(或者,在命名空间的情况下,引用该命名空间的内联命名空间集的元素)或专业化; 该成员不仅仅是由声明者id的嵌套名称说明符所指定的类或命名空间范围内的using声明引入的.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有