template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
它出现在std::experimental::make_array
的{{3}}中。它看起来很奇怪的原因是类名包含一个模板参数列表<std::reference_wrapper<T>>
,只提到一个参数,但该参数位于类的模板参数内(即某些内容已被省略)。
答案 0 :(得分:2)
您链接到的页面中的其他相关行是:
template<class> struct is_ref_wrapper : std::false_type {};
这定义了通用模板。下一行是专业化。
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
使用is_ref_wrapper
作为模板参数实例化std::reference_wrapper<T>
时,会使用专门化。
答案 1 :(得分:2)
那条线与它上面的那条线串联:
template<class> struct is_ref_wrapper : std::false_type {};
template<class T> struct is_ref_wrapper<std::reference_wrapper<T>> : std::true_type {};
第一行声明(主)模板is_ref_wrapper
。第二行声明了一个特化,当且仅当参数与某些std::reference_wrapper<T>
的{{1}}匹配时,将选择该特化而不是主模板。这正是所要求的行为。