示例代码:为什么可变参数函数不能“吃”C++ 11中的列表初始化参数?
#include <unordered_map>
int main() {
std::unordered_map<int, std::pair<int, int>> map;
map.emplace(1, {1, 1});
return 0;
}
凡emplace()
有签名,如:
template <class... _Args>
pair<iterator, bool> emplace(_Args&&... __args);
的gcc
说,功能expectes 0参数 - 2提供的。 clang
表示函数需要1个参数 - 2提供。
我甚至不明白 - 这个代码有什么问题?
'map.emplace(1,std :: pair {1,1})'的作品,不是吗? –
Massa
@Jefffrey:不,“{...}”不是一个表达式。第一个是“自动扣减”的特殊框架,它本来不应该存在(并且希望在未来的某个时候可能会被删除),第二个是从braced-init-list中构建的。 – Xeo
@Massa:是的,这就足够了。 – Puppy