考虑以下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命名空间之后可以提升句柄吗?)
答案 0 :(得分:4)
我不相信会出现问题,因为std
不包含名为boost
的命名空间,因此仍然不存在任何名称冲突。
对于ADL:ADL仅考虑类类型的封闭命名空间。 ADL为boost类类型找到的任何函数都必须位于boost
命名空间内。
您只需对标准库实体执行::std_entity
,为增强实体执行boost::boost_entity
即可解析所有实体。
但是,如果没有明确地尝试,我想不出一个很好的方法来证明这一点。当然,避免任何问题的确定方法是不要using namespace std;
,如果你真的必须(你没有),只能在所有内容之后进行。