【发布时间】:2015-05-25 16:26:34
【问题描述】:
#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一样吗? 我该如何解决这个问题?
【问题讨论】:
-
using, in that form,需要一个类型名。不是一个值。 -
conditional_t与true_type和false_type一起使用有什么意义,如果可以直接使用std::is_void< T >::value? -
Ahhh .. 我挣扎了一个多小时,然后我意识到大多数在线编译器使用 g++
-
@PiotrS。这只是一个例子,条件可以是任何东西(我脑子里有模板)