2012-04-24 64 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

相关问题