【发布时间】:2024-01-23 10:28:02
【问题描述】:
考虑以下程序。它的格式是否符合 c++ 标准(需要参考标准的相关部分):
namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
对于不同的编译器,我得到了不同的结果。我正在尝试找出我应该为哪个编译器提交错误报告:
Clang:给出以下编译器错误:命名空间“N”中没有名为“i”的成员
GCC 和 Visual C++ 编译它没有错误。
为了比较,以下给出了所有三个编译器的编译器错误:
namespace X { void f(); }
namespace N { using X::f; }
void N::f() {};
int main() {}
【问题讨论】:
-
有趣的是,VS2013 可以编译,但 IntelliSence 显示
"Error: namespace "N" has no actual member "i" -
我想答案就在这里:link
-
@Supremum 您可以在isocpp.org/std/the-standard获取您自己的 C++ 标准副本以阅读。
-
Jorj Tyron:那个链接没有回答这个问题。这个问题与最佳实践无关。
-
@Supremum 我通过将“使用 X::i”更改为“使用命名空间 X;”来使用 CLang。
标签: c++ namespaces language-lawyer definition using-declaration