#include <type_traits>
#include <functional>
//0
template<class R, class... Args>
struct function_traits{};
//1
template<class R, class... Args>
struct function_traits<std::function<R(Args...)>> : function_traits<R(Args...)>{
static_assert(true, "std::function");
};
//2
template<class Callable>
struct function_traits :
function_traits<decltype(&Callable::operator())> {
static_assert(true, "Callable");
};
int main(void)
{
std::function<void()> f0;
function_traits<decltype(f0)> f1;
return 0;
}
希望 24 行的模板推导先匹配 1 再 匹配到 0.
实际上先匹配到 1,然后匹配到 2, 然后就推导失败了。
编译器 MSVC 2017.