#include <iostream>
#include <typeinfo>
#include <functional>
struct A { int t; };
template<typename T>
bool f(const T& a, const T& b, std::function<bool(const T&, const T&)> cmp) {
return cmp(a, b);
}
int main() {
std::function<bool(const A&, const A&)> cmp = [] (const A& a, const A& b) -> bool {
return a.t == b.t;
};
auto cmp1 = [] (const A& a, const A& b) -> bool {
return a.t == b.t;
};
std::cout << typeid(cmp).name() << "\n";
std::cout << typeid(cmp1).name() << "\n";
f(A(), A(), cmp);
f(A(), A(), cmp1); // lambda.cpp(23) : error C2784: 'bool f(const T &,const T &,std::function<bool(const T &,const T &)>)' : could not deduce template argument for 'std::function<bool(const T &,const T &)>' from 'main::<lambda_7d1f31daea416f31c63c1f4dba55084d>' lambda.cpp(9) : see declaration of 'f'
}
Собственно, что хотелось сказать. Абыдна. Ну и чтоб уже что-то спросить: ткните пальцем в стандарт про это и будет ли в c++14 работать? :) Ну или может я что-то не так делаю?