1
4

1 回答 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 回答