为什么我们不能在C++中的名称空间中包含std头

zJa*_*Jay 2 c++

以下代码将导致g ++ 4.4中的编译错误:

// File test.cpp
namespace A
{
    #include <iostream>
}

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有这个要求,因为一些第三方库没有名称空间受保护,如果我直接包含这些标题,我的名称空间就会受到污染.
因此,我尝试为这些库创建名称空间,但如果库包含一些"标准标题",则上述方法将失败.

有人可以帮忙吗?

谢谢!

ice*_*ime 7

我相信17.4.2.1 [lib.using.headers]禁止在命名空间中包含标准库头:

翻译单位应仅在任何外部声明或定义之外包括标题,并且在首次提及其在该翻译单元中声明或首先定义的任何实体之前,应在词汇上包括标题.

除了向图书馆作者提交请求之外,我认为你无能为力.