【发布时间】:2021-02-08 12:01:02
【问题描述】:
template<bool F, typename = std::enable_if_t<F>>
auto func1() -> int { return 0; }
template<bool F, typename = std::enable_if_t<!F>>
auto func1() -> int { return 0; }
template<bool F, std::enable_if_t<F, int> = 0>
auto func2() -> int { return 0; }
template<bool F, std::enable_if_t<!F, int> = 0>
auto func2() -> int { return 0; }
这里有两组重载函数:func1() 和 func2()。
func1() 对 SFINAE 使用类型参数,func2() 对 SFINAE 使用非类型参数。
编译这些函数时,func1() 会导致编译错误,但func2() 不会。为什么 SFINAE 对 func2() 有效而对 func1() 无效?
【问题讨论】:
标签: c++ templates sfinae non-type-template-parameter