地图值类型的decltype?

时间:2012-04-24 14:15:56

标签: c++ gcc c++11

这在c ++ 11中是否合法:

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中尝试了这个并且它没有用。海湾合作委员会抱怨:

expected primary-expression before 'decltype'

我希望不要这样做:

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

我猜c ++ 11无法解决这个问题或者让它变得更容易。

2 个答案:

答案 0 :(得分:4)

代码是正确的C ++。就像Basile在评论中提到的那样,这是一个针对GCC 4.7修复的错误。

答案 1 :(得分:2)

这不能解答您的问题,但它确实具有可能适用于您的编译器的优点:

xy_map.emplace(my_x, my_y);

That will construct the value type from the given arguments.第一个参数构造密钥,其他参数用于值。这将有效地构建std::pair。所以不需要像decltype这样的丑陋的东西。

相关问题