【发布时间】:2015-11-18 20:53:32
【问题描述】:
请考虑以下代码:
#include <iostream>
namespace Foo{
void ool() // Version A
{
std::cout << "Foo::ool" << std::endl;
}
inline namespace Bar{
void ool() // Version B
{
std::cout << "Foo::Bar::ool" << std::endl;
}
}
}
int main()
{
Foo::ool(); // <- error
}
Clang 和 G++ 都正确地将 Foo::ool 标记为模棱两可。我可以毫无问题地调用Foo::Bar::ool,但是有没有办法在不更改其声明的情况下调用版本 A?
我发现有类似情况的人试图了解会发生什么,但我没有找到解决这种情况的方法。
我处于这种情况是因为我有一个项目,其中包含 std::__1::pair 和 std::pair 的声明,在不同的地方进行,std::__1 是一个内联命名空间。我需要代码明确指向std::pair。有解决办法吗?
【问题讨论】:
-
也许在引入引用std::pair的__1::pair之前定义一个别名模板?
-
你确定你看的不是this problem吗? (基本上,解决方案是将
-std=c++0x(或与较新的编译器类似)添加到编译选项中。)您使用的是什么编译器版本和设置? -
utnapistim:你是对的。对于我的具体情况,我遇到过这种解决方法,但它让我很好奇如何在一般情况下解决这种具体的歧义。我认为解决方案在我的情况下更多在于 std=libstdc++ 但它确实解决了我的编译问题,谢谢!
标签: c++ c++11 namespaces inline-namespaces