以下代码段中class = void
的目的是什么?
template< class, class = void >
struct has_type_member : false_type { };
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
答案 0 :(得分:10)
sudo su jenkins
这是你的默认结构模板,它要求2个模板参数,但第二个默认设置为template< class, class = void >
struct has_type_member : false_type { };
,所以这个参数不需要显式指定,有点像默认函数参数。
然后:
void
是template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
结构的模板专业化,如果has_type_member
不存在(因此,语法无效),SFINAE将排除此专业化,如果确实存在,则会选择此专业化否则。
第二个参数必须用于模板特化,但我们不会在“后备”T::type
中使用它,因此我们默认为struct
。