c++ 11名称空间查找从c++ 98更改



我在使用boost之前编写了一些代码。我在"核心"命名空间中创建了自己的绑定函数(类似于bind1st)。它以前很好用。

但是,当在gcc中添加-std=c++11时,许多bind被解析为std::bind而不是core::bind,从而导致编译错误。我可以通过将"bind"的所有用法显式地改为"core::bind"来实现它。

这发生在命名空间core中的所有代码,在core下嵌套的命名空间中以及在我使用"using namespace core"的地方。甚至在我的bind实现中对bind的"递归"调用也有这个问题。

我在预处理器输出中寻找"使用命名空间std",并且只能在boost的交换方法中找到一个实例,并且仍然从std::而不是core::中找到bind。

此外,gcc-5.3.1比gcc-4.8.4失败得多。

您确实应该包含一个最小、完整和可验证的示例,但是我将使用我的通灵调试技能,并预测您的问题涉及(一些)参数位于std名称空间的情况(例如std::stringstd::vector等)。

参数依赖查找意味着如果参数在std名称空间中,则在std名称空间中查找函数(bind)。在c++ 03中,它没有在那里找到,所以编译器开始在core中查找。在c++ 11中,它std中可以找到,所以编译器使用它。

最新更新