为什么以下代码在C++ 11下编译? (我知道它不会链接。)我希望std::enable_if
测试失败,因为1()
不是函数类型。
#include <type_traits>
template <typename Func, typename... Args>
typename std::enable_if<std::is_function<Func(Args...)>::value>::type
delegate(Func, Args...);
int main(void) {
delegate(1); // << Why does this line compile?
return 0;
}
最佳答案
Func
为int
,Args
为空,因此Func(Args...)
为int()
,即“返回()
的int
函数”。is_function
为其返回true的任何内容都不能是按值函数参数的类型,因此您要执行的操作并不明显。
为此使用表达式SFINAE。
template <typename Func, typename... Args>
auto delegate(Func f, Args... args) -> decltype(f(args...), void());
根据您实际要执行的操作,可能需要
std::move
f
和args
。