aby*_*s.7 14 c++ variadic-functions compiler-bug c++11 list-initialization
示例代码是:
#include <unordered_map>
int main() {
std::unordered_map<int, std::pair<int, int>> map;
map.emplace(1, {1, 1});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
哪里emplace()有签名,如:
template <class... _Args>
pair<iterator, bool> emplace(_Args&&... __args);
Run Code Online (Sandbox Code Playgroud)
该gcc说的功能expectes 0参数- 2提供的.该clang说,函数需要1个参数- 2提供的.
我甚至不明白 - 这段代码有什么问题?
我甚至不明白 - 这段代码有什么问题?
出于某些不明原因,initializer-list参数是一个非推导的上下文,请参阅initializer_list和模板类型推导.这是因为C++ 11标准的§14.8.2.5/ 5这样说.我不知道这种看似不一致和违反直觉的行为的理由,但我们并不孤单:
C++类型演绎和为什么你关注 Scott Meyers,从37:00开始
至于你的情况,也许最简单的解决方法是:
map.emplace(1, std::make_pair(1, 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |