问问题
420 次
1 回答
6
lambda 的类型是一个匿名类型,它有一个operator()
. 它不是一个std::function<>
.
您可以检查第一个参数是否是调用 3 的函子,而不是专门化类型(演示:http: //ideone.com/IQ4N6L):
#include <iostream>
#include <type_traits>
template<typename F, typename ...Args>
auto call(F&& f, Args&& ...args)
-> typename std::enable_if<std::is_same<decltype(f()), void>::value>::type
{
std::cout << "call 3\n";
}
template<typename ...Args>
void call(Args&& ...args) {
std::cout << "call 1\n";
}
int main() {
call(1);
call([](){});
}
于 2012-12-22T20:11:51.310 回答