【发布时间】:2018-11-16 11:29:48
【问题描述】:
我有这段代码:
auto it = my_map.lower_bound(my_key);
以下断言给了我错误:
static_assert(std::is_same<decltype(it), std::map<K, V>::const_iterator>::value, "Error");
下面的,就可以了:
static_assert(std::is_same<decltype(it), std::map<K, V>::iterator>::value, "Error");
然后,编译器没有给我const_iterator。好的。但在这里:
my_map.insert_or_assign(it, my_key, some_val);
即使使用iterator(不是const_iterator),该功能也可以正常工作。但是,在这个link,insert_or_assign 签名上,我只有const_iterator 参数。我还在 Visual Studio 上搜索了 .h 文件,并且此信息匹配。在 GCC 7.2+ 和 Visual Studio 2015 上测试,一切都可以编译和运行。
为什么会编译?为什么insert_or_assign 接受iterator?
【问题讨论】:
标签: c++ iterator c++17 const-iterator