1
4

1 に答える 1

6

ラムダの型は、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 に答える