在以下简化的SSCCE中,为什么静态断言失败?
显然这是因为编译器尝试实例化Assert<i - 8>
,对于无符号size_t
,会导致天文index
模板参数。但为什么它试图实例化这个以及我该怎么做呢?
#include <utility>
struct Struct {
template<size_t index>
struct Assert {
static_assert(index < 8, "xxx");
using Type = int;
};
};
template<size_t i>
using Test = typename std::conditional<
(i < 8),
typename Struct::template Assert<i>::Type,
typename Struct::template Assert<i - 8>::Type
>::type;
Test<0> t;