我看到微软的stddef.h
定义nullptr_t
这样的:'nullptr_t`应该是全局命名空间的一部分吗?
namespace std
{
typedef decltype(__nullptr) nullptr_t;
}
using ::std::nullptr_t;
的using
decleration注入nullptr_t
到全局命名空间。我无法在标准中找到任何说明应该完成的事情。
我还看到在GCC
nullptr_t
不在全局命名空间中。
这两种实现都可以被允许或者是其中的一个bug?
我的不好,GCC的行为与CL相同。
编辑:用cstddef
同样的情况,下面编译罚款与VC(online too)。
#include <cstddef>
int main()
{
nullptr_t nil = nullptr;
}
'使用:: std :: nullptr_t;'和'使用std :: nullptr_t;'有区别吗?很好的问题btw。 – gsamaras
@gsamaras我不认为有什么区别。 – Motti
在这方面没有区别。如果你有'namespace foo {namespace std {using nullptr_t = int}使用std :: nullptr_t; }'。 –