template <int... ValuesOrSentinals>
struct type {};
template <typename T, typename U>
struct are_compatibles;
template <int... TVals, int... UVals>
struct are_compatibles<type<TVals...>, type<UVals...>>
: public conjunction<bool_constant<sizeof...(TVals) == sizeof...(UVals)>,
bool_constant<((TVals == UVals) && ...)>> {};
这里我定义了两个参数包之间的兼容性检查。实际的成员检查比相等检查更复杂,所以我不能回退到is_same<integer_sequence<int, TVals...>, integer_sequence<int, UVals...>>
. 我必须自己检查每个成员。
are_compatibles<type<1, 2>, type<1, 2>>::value == true;
编译。are_compatibles<type<1, 2>, type<2, 1>>::value == false
编译。are_compatibles<type<1, 2>, type<1>>::value == false
无法编译,因为参数包的长度不同。
有没有办法比较不同长度的成员参数包?