2012-04-24 65 views
1

這是合法的C++ 11:decltype地圖值類型?

std::unordered_map<X, Y> xy_map; 
X my_x; 
Y my_y; 
xy_map.insert(decltype(xy_map)::value_type(my_x, my_y)); 

我在GCC 4.6.3嘗試這樣做,也沒有工作。 GCC抱怨:

expected primary-expression before 'decltype' 

我希望不要做:

typedef std::unordered_map<X, Y> MyMap; 
xy_map.insert(MyMap::value_type(my_x, my_y)); 

我想C++ 11不解決或使其變得更容易。

+3

試着用GCC 4.7 – 2012-04-24 14:17:20

+0

@BasileStarynkevitch我不能用gcc 4.7的原因,他們打破了有一些其他的東西:http://stackoverflow.com/questions/8297652/error-boost-disable-threads :( – anio 2012-04-24 15:54:03

+1

您可能已經意識到它,但通常的方法是使用'std :: make_pair(my_x,my_y)' – 2012-04-24 16:43:40

回答

4

該代碼是正確的C++。就像Basile在評論中提到的那樣,這是一個爲GCC 4.7修復的bug。

2

這不回答你的問題,但它的優點是,你的編譯器可能工作:

xy_map.emplace(my_x, my_y); 

That will construct the value type from the given arguments.第一個參數構建的關鍵,其他都用於值。這將有效地構建std::pair。所以不需要像decltype等這樣的醜陋的東西。

+0

emplace會很好,但它不能在gcc 4.6.3上工作。:( – anio 2012-04-24 16:25:35

相關問題