【发布时间】:2018-10-04 15:24:03
【问题描述】:
我对@987654321@ 中的以下引用感到困惑:
此规则适用于函数模板的重载解析:当用推导类型替换模板参数失败时,特化将从重载集中丢弃,而不是导致编译错误。
这是否意味着 SFINAE 不能在没有类型扣除的情况下工作?例如,考虑以下代码:
template <typename T> std::true_type has_value_type_helper(typename T::value_type*);
template <typename> std::false_type has_value_type_helper(...);
template <typename T> inline constexpr bool has_value_type_v
= decltype(has_value_type_helper<T>(nullptr))::value;
int main() {
std::cout << has_value_type_v<int> << std::endl;
std::cout << has_value_type_v<std::vector<int>> << std::endl;
}
它按预期工作,但据我所知,没有类型推导。模板参数在has_value_type_helper<T>(nullptr) 中明确提供。连SFINAE都可以这样用吗?
【问题讨论】:
标签: c++ sfinae type-deduction template-argument-deduction