为什么以下代码在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;
}

最佳答案

FuncintArgs为空,因此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 fargs

08-25 08:35
查看更多