条件模板变量
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() {}
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>'
这不是和here一样吗?
我该如何解决?
您只能使用 template aliases 来为类型设置别名。变量模板的正确语法是
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;
这解释了真正的问题。
#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() {}
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>'
这不是和here一样吗? 我该如何解决?
您只能使用 template aliases 来为类型设置别名。变量模板的正确语法是
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;
这解释了真正的问题。