Mot*_*tti 4 c++ language-lawyer c++11
我看到微软的stddef.h定义nullptr_t如下:
namespace std
{
typedef decltype(__nullptr) nullptr_t;
}
using ::std::nullptr_t;
Run Code Online (Sandbox Code Playgroud)
该usingdecleration注入nullptr_t到全局命名空间.我在标准中找不到任何说明应该这样做的东西.
我也看到GCC nullptr_t不在全局命名空间中.
可以允许两种实现,还是其中一种是错误?
我的坏,GCC的行为与CL相同.
编辑:同样的情况发生cstddef,以下编译好VC(在线也).
#include <cstddef>
int main()
{
nullptr_t nil = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
它必须位于全局命名空间中.
D.5 C标准库头文件[depr.c.headers]
2每个C标头(每个标头都有一个表单名称)的
name.h行为就好像每个由相应cname标头放置在标准库名称空间中的名称放在全局名称空间范围内.[...]
对于特定于C++的名称,此处没有例外.如果C++为<cstddef>C <stddef.h>提供的名称没有提供,那么C++ <stddef.h>仍然需要提供它.