c++ - 为什么这种替换失败会产生错误?
问题描述
在模板特化中,我有一个带有 enable_if 参数的模板参数,导致 enable_if 没有“类型”成员,因此模板特化应该失败,但不会产生错误:
#include <type_traits>
template <typename value_t_arg, typename T = void>
struct underlyingtype
{
using underlyingtype_t = value_t_arg;
};
template <typename value_t_arg>
struct underlyingtype < value_t_arg, typename std::enable_if<false>::type>
// std::enable_if<false> has no 'type' member, and so substitution should fail,
// but no create an error, right?
{
//using underlyingtype_t = value_t_arg::integral_t;
};
为什么这里会产生错误?
解决方案
您的代码格式错误(不需要诊断),因为无论模板参数如何,条件始终为假,这意味着对于每个可能的模板参数,特化都是格式错误的。
该程序格式错误,不需要诊断,如果:
— 不能为模板生成有效的特化......并且模板没有被实例化,......
就本节而言,部分专业化似乎算作“模板”。
推荐阅读
- python - 我如何在不同的文件中使用相同的 python 记录器?
- javascript - 使用 lodash 3 将对象转换为对象数组
- javascript - 函数如何获得“x”值
- haskell - 如何创建通用地图
- spring-boot - 在spring data jpa中使用两个不同的实体加入
- mysql - laravel 查询生成器(GROUP CONCAT)错误
- java - Spring Boot 构建失败:启动 fork 时出错,退出代码 134
- javascript - 使用 Promise 将 HTML5 FileReader 的结果捕获到变量中
- java - Tinkerpop3 自定义边缘 id 生成器
- html - 可访问的开关元件(网络)