试图通过using-declaration定义命名空间成员
Trying to define namespace member via using-declaration
考虑下面的程序。它是否符合c++标准(需要参考标准的相关部分):
namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
我得到不同的编译器不同的结果。我想弄清楚我应该为什么编译器提交一个bug报告:
Clang:给出以下编译错误:命名空间'N'中没有名为'i'的成员
GCC和Visual c++编译它没有错误。
为了进行比较,下面给出了所有三种编译器的编译错误:
namespace X { void f(); }
namespace N { using X::f; }
void N::f() {};
int main() {}
当前工作草案N4527, [8.3p1]:
[…当declarator-id被限定时,声明应引用a类或命名空间的先前声明的成员限定符引用(或者在名称空间的情况下,引用)的元素该命名空间的内联命名空间集(7.3.1))或专门化;该委员不应仅仅是由一名律师介绍的在类或命名空间的作用域中使用using-declaration声明符id的嵌套名称说明符。[…]
所以,绝对是病态的;GCC和MSVC是错误的
相关文章:
- 在命名空间中定义函数还是限定函数
- 使用命名空间时出现多个定义错误
- 如何对命名空间限定类型进行类型定义?
- C++未定义的命名空间
- 命名空间更改函数定义
- 使用命名空间在另一个".cpp"文件中定义
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 在方法定义中显式指定命名空间
- 在 c++ 中定义命名空间中模板类的友元函数时出现问题
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 为什么 ADL 优先于'std namespace'中的函数,但等于用户定义命名空间中的函数?
- G++显示关于未定义命名空间的错误
- 定义命名空间内类的构造函数
- 在自定义命名空间下包含一个标头
- 与自定义命名空间的链接失败未解析的外部符号
- 自定义命名空间的链接器错误
- 试图通过using-declaration定义命名空间成员
- 如何正确重载作为用户定义命名空间一部分的模板化类的插入运算符?
- 定义命名空间的变体和__visibility__的含义
- 重新定义命名空间的变量