Sup*_*mum 16 c++ namespaces definition using-declaration language-lawyer
考虑以下程序.根据c ++标准(参考所需标准的相关部分)是否格式良好:
namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
Run Code Online (Sandbox Code Playgroud)
我为不同的编译器得到了不同的结果.我正在试图弄清楚我应该为哪个编译器提交错误报告:
Clang:给出以下编译器错误:名称空间'N'中没有名为'i'的成员
GCC和Visual C++编译它没有错误.
为了比较,下面给出了所有三个编译器的编译器错误:
namespace X { void f(); }
namespace N { using X::f; }
void N::f() {};
int main() {}
Run Code Online (Sandbox Code Playgroud)
bog*_*dan 11
目前的工作草案N4527,[8.3p1]:
[...]当declarator-id被限定时,声明应引用先前声明的限定符所引用的类或命名空间的成员(或者,如果是命名空间,则引用内联命名空间集的元素)该命名空间(7.3.1))或其专业化; 该成员不得只是已经被引入了 using声明由指定的类或命名空间的范围嵌套名称说明符的的声明符-ID.[...]
所以,绝对是不合理的; 海湾合作委员会和MSVC是错误的.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |