示例代碼:爲什麼可變參數函數不能「吃」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