Class模板参数推论是否可以与std :: map一起使用?

时间:2019-05-12 23:38:52

标签: c++ templates c++17

我试图让CTAD与std::map一起使用,但是我无法使其工作。

#include<iostream>
#include<string>
#include<map>
#include<vector>

using namespace std;
using namespace std::string_literals;

int main() {
    std::vector v{1,2,3}; // ok
    std::map m{{4, "four"s},{7,"seven"s},{1,"one"s},{5,"five"s}}; // error
}

是否有使其工作的方法,或者std::map要使其工作复杂吗?

1 个答案:

答案 0 :(得分:4)

问题在于此std::map m{{4, "four"s},{7,"seven"s},{1,"one"s},{5,"five"s}}; // error{}中的{},而CTAD却不这样做。

如果您执行std::map m{std::pair{4, "four"s},{7,"seven"s},{1,"one"s},{5,"five"s}};,它将成为CTAD起作用的初始化列表。