条件模板变量
Conditional template variable
#include <type_traits>
template< typename T >
using cond =
std::conditional_t<
std::is_void< T >::value ,
std::true_type ,
std::false_type
>::value;
static_assert( cond< void > , "" );
int main() {}
示例 clang 3.6
missing 'typename' prior to dependent type name 'std::conditional_t::value, std::true_type, std::false_type>::value'
为什么它缺少typename
,因为它根本不是一种类型?
如果我添加typename
它会向我抛出这个:
error: typename specifier refers to non-type member 'value' in 'std::integral_constant<bool, true>'
不是和这里一样吗?我该如何解决此问题?
只能使用模板别名来别名类型。变量模板的正确语法是
template< typename T >
constexpr bool cond = std::conditional_t< std::is_void< T >::value,
std::true_type,
std::false_type >::value;
虽然您的代码收到的错误消息有点令人困惑,但添加建议的typename
会导致 clang 3.6 的这条更有用的消息
error: typename specifier refers to non-type member 'value' in
'std::integral_constant'
using cond = typename std::conditional_t< std::is_void< T >::value,
^~~~~ std::true_type,
std::false_type >::value;
这解释了真正的问题。
相关文章:
- 基于模板值的条件变量
- 没有超时的C++条件变量
- 在条件变量中触发错误信号的频率是多少
- 使用不变量来确定二分搜索中的边界条件
- 在通知提升间处理条件变量时未按住锁会导致问题
- 通知条件变量后使用互斥锁
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 滥用条件变量
- 升压插值条件变量可以虚假唤醒吗?
- 根据模板类型有条件地删除变量
- 子线程中的条件变量等待停止主线程中的执行
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 条件变量基本示例
- 正在连接的等待条件变量的线程会发生什么情况?
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 当线程处理不同的类时,应该在哪里声明条件变量、互斥对象
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 条件变量:wait_for.gcc错误
- 如何"stop"正在等待条件变量的分离线程?
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取