这是我的示例代码及其输出。
namespace AAA
{
#include <vector>
}
int main()
{
AAA::std::vector<int> vec;
return 0;
}
/usr/include/c++/4.9/new:129:41: error: 'void* AAA::operator new(AAA::std::size_t)' may not be declared within a namespace
__attribute__((__externally_visible__));
<vector>
(以及其他标题)?答案 0 :(得分:3)
是的,此运营商必须处于全球范围。这是“特别的”。
[C++14: 3.7.4.1/1]:
分配函数应该是类成员函数或全局函数;如果在全局范围以外的命名空间范围内声明分配函数或在全局范围内声明静态,则程序格式不正确 范围。 [..]
而且,是的,标准库标题必须是#include
d在“可用空间”中:
[C++14: 17.6.2.2/3]:
翻译单位应仅在任何外部声明或定义之外包含标题,并且应在该翻译单元中第一次引用之前的词汇表中包含该标题,以及该标题中声明的任何实体。无需诊断。