这在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无法解决这个问题或者让它变得更容易。
答案 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
这样的丑陋的东西。