这是一个奇怪的案例。
为什么吗
我正在使用 MSVC 2013 。
background-image
答案 0 :(得分:1)
这里发生的是,在MSVC 2013及更早版本中,std :: result_of模板返回的是const Class
,而不仅仅是Class
。这导致地图的值类型不可复制。
通过将typedef double Type
更改为typedef const double Type
,您可以看到完全相同的问题。
如果仍然需要使用非C ++ 11兼容库,则可以将lambda的返回类型指定为Type
,但这将涉及副本。
或者,删除constness但更改:
typename std::result_of<ValueFunctor(T)>::type
到
typename std::remove_const<typename std::result_of<ValueFunctor(T)>::type >::type
template<typename T, typename ValueFunctor>
std::map<int, typename std::remove_const<typename std::result_of<ValueFunctor(T)>::type >::type>
testFun(ValueFunctor valueFunctor)
{
std::map<int, typename std::remove_const<typename std::result_of<ValueFunctor(T)>::type>::type > map;
return map;
}