c++ - 为什么来自 libcxx 的 __dependent_type 使用模板非类型参数 bool _Dummy?
问题描述
以下是 __dependent_type 的定义:
template <class _Tp, bool>
struct _LIBCPP_TEMPLATE_VIS __dependent_type : public _Tp {};
所有用例:
/usr/.../c++/v1 >>> rg "_dependent_type"
memory
2211: __dependent_type<is_default_constructible<_T1>, _Dummy>::value &&
2212: __dependent_type<is_default_constructible<_T2>, _Dummy>::value
2402: typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
2406: typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
2410: typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
2412: template <bool _Dummy, class _Deleter = typename __dependent_type<
2671: typename __dependent_type<_DeleterSFINAE, _Dummy>::__lval_ref_type;
2675: typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
2679: typename __dependent_type<_DeleterSFINAE, _Dummy>::__bad_rval_ref_type;
2681: template <bool _Dummy, class _Deleter = typename __dependent_type<
variant
1134: enable_if_t<__dependent_type<is_default_constructible<__first_type>,
1292: __dependent_type<is_move_constructible<_Types>, _Dummy>::value &&
1293: __dependent_type<is_swappable<_Types>, _Dummy>::value)...>::value,
tuple
621: __lazy_all<__dependent_type<is_default_constructible<_Tp>, _Dummy>...>
问题:
不是吗
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS __dependent_type : public _Tp {};
和
__dependent_type<is_default_constructible<_T1>>::value
足够的?
为什么 libcxx 需要这个虚拟布尔值?
解决方案
它是bool
使类型依赖的虚拟对象,这是 的重点__dependent_type
,否则您可以只使用类型本身。
以这段代码为例:
template <bool _Dummy>
using _GoodRValRefType =
typename __dependent_type<_DeleterSFINAE, _Dummy>::__good_rval_ref_type;
如果没有 dummy 使其成为依赖类型,当类模板被实例化时,_DeleterSFINAE::__good_rval_ref_type
可能会导致硬错误,因为并非所有模板_DeleterSFINAE
都有一个__good_rval_ref_type
成员。
依赖类型延迟评估,以便您_GoodRValRefType
稍后可以在 SFINAE 上下文中使用。
推荐阅读
- c# - 如何使用代码数据绑定将文本框文本绑定到数据库中单元格的第三个字符?
- sql - 在连接条件中使用时语句在 oracle 中不起作用的情况
- google-bigquery - 如何在bigquery中使用基于另一个列值的列值
- javascript - 子组件中的变量为空,VueJs
- javascript - CanvasJs图表未呈现
- python - 如何修复我在这个程序中得到的 0 输出?
- sql - 如何从第二个表中的一个表中选择不存在的数据?
- python - 创建列表值的十六进制转储
- python - Python 组合函数
- html - 每当我按下按钮时如何使其从透明变为白色并再次按下以将其从白色变为透明?