1

这在 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 并没有解决这个问题或者让它变得更容易。

4

2 回答 2

4

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

于 2012-04-24T15:23:50.453 回答
2

这并不能回答您的问题,但它确实具有可能在您的编译器上工作的优点:

xy_map.emplace(my_x, my_y);

这将从给定的参数构造值类型。第一个参数构造键,其他参数用于值。这将有效地构建std::pair到位。所以不需要丑陋的东西之类的decltype

于 2012-04-24T15:12:40.270 回答