請考慮下面的代碼:當內聯名稱空間存在時,如何顯式引用封閉名稱空間?
#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
}
兩個鏘和G ++正確標註Foo::ool
模棱兩可。我可以毫無問題地致電Foo::Bar::ool
,但有沒有辦法在不更改聲明的情況下調用版本A?
我發現人們在類似的位置試圖瞭解發生了什麼,但我沒有看到這種情況下的解決方案。
我在這種情況下,因爲我有一個項目,其中包括std::__1::pair
和std::pair
的聲明,在不同的地方做出,std::__1
是一個內聯命名空間。我需要明確指出std::pair
的代碼。有沒有解決方案?
引入__1 ::對,是指對std :: pair之前或許定義一個別名模板? – Columbo
你確定你沒有看[這個問題](http://stackoverflow.com/questions/9000816/libc-stop-std-renaming-to-std-1)? (基本上,解決方案是在編譯選項中添加-std = C++ 0x(或類似於新編譯器)。)您使用的編譯器版本和設置是什麼? – utnapistim
utnapistim:你是對的。我遇到了這個解決方案,但是它讓我很好奇在一般情況下如何解決這個特定的歧義。我認爲這個解決方案在std = libstdC++中更多地介紹了我的情況,但它確實解決了我的編譯問題,謝謝! – YvesQuemener