std :: conditional中的static_assert

时间:2018-02-07 16:52:49

标签: c++ templates

在以下简化的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;

0 个答案:

没有答案