使用命名空间std然后包括boost?

时间:2013-02-21 19:23:30

标签: c++ boost c++11

考虑以下C ++ 11程序:

 #include <stdhdr1>
 #include <stdhdr2>
 #include <stdhdr3>

 using namespace std;

 #include <boost1>
 #include <boost2>
 #include <boost3>

 int main()
 {
 }

其中stdhdrn是标准库标题,boostn是提升标题。

是否存在无法编译的情况?

此外,在main中给出了一些额外的用户代码,打开std命名空间是否存在歧义(或其他错误),无法通过明确限定模糊(或错误)实体来解析?

(例如,因为ADL考虑了开放的std命名空间或其他?)

(换句话说,在开放的std命名空间之后可以提升句柄吗?)

1 个答案:

答案 0 :(得分:4)

我不相信会出现问题,因为std不包含名为boost的命名空间,因此仍然不存在任何名称冲突。

对于ADL:ADL仅考虑类类型的封闭命名空间。 ADL为boost类类型找到的任何函数都必须位于boost命名空间内。

您只需对标准库实体执行::std_entity,为增强实体执行boost::boost_entity即可解析所有实体。

但是,如果没有明确地尝试,我想不出一个很好的方法来证明这一点。当然,避免任何问题的确定方法是不要using namespace std;,如果你真的必须(你没有),只能在所有内容之后进行。

相关问题