为什么clang ++不能推断出lambda地图的类型?

rub*_*bik 3 c++ lambda auto c++14

我有以下代码:

enum RelationalOperator { LT, LTE, EQ, GTE, GT };
std::map<RelationalOperator, bool (*)(const Point&, const Point&)> ops = {
    { GTE, [](const Point& a, const Point& b) { return a >= b; } },
    { LTE, [](const Point& a, const Point& b) { return a <= b; } },
    { EQ, [](const Point& a, const Point& b) { return a == b; } },
    { GT, [](const Point& a, const Point& b) { return a > b; } },
    { LT, [](const Point& a, const Point& b) { return a < b; } },
};
Run Code Online (Sandbox Code Playgroud)

此代码位于模板内,Point是模板参数.

我试图取代变量的类型opsauto,但锵++说:

src/utils.hpp:47:10: error: cannot deduce actual type for variable 'ops' with type 'auto' from initializer list
Run Code Online (Sandbox Code Playgroud)

这是为什么?我认为关键字auto适用于这种情况,其中类型很长且相当明显.

Leo*_*eon 5

auto不适用于初始化列表.可以使用相同的初始化列表初始化一堆其他类型,例如:

std::map<int, bool (*)(const Point&, const Point&)>
std::multimap<RelationalOperator, bool (*)(const Point&, const Point&)>
std::vector<std::pair<int, bool (*)(const Point&, const Point&)>>
Run Code Online (Sandbox Code Playgroud)