这个条件如何放在模板偏特化中?

How can this condition be put in template partial specialization?

template<size_t bits_count, typename = void>
struct best_type {
};

template<size_t bits_count>
struct best_type<bits_count,enable_if_t<bits_count > 8>> { // error: template argument 2 is invalid
  typedef byte type;
};

错误是因为解析器将第二个模板参数视为 enable_if_t<bits_count >,紧跟在随机 8.

之后

显然,解决这个问题的方法是将 enable_if_t 的参数替换为 bits_count >= 9,但是否可以采取一些措施来保留原始表达式,以便对未来的读者有意义?

您应该添加额外的括号来向编译器解释您的意思:

template<size_t bits_count>
struct best_type<bits_count,enable_if_t<(bits_count > 8)>> {
    typedef byte type;
};

把条件放在括号里。

template<size_t bits_count, typename = std::enable_if_t<true>>
struct best_type {
};

template<size_t bits_count>
struct best_type<bits_count, std::enable_if_t<(bits_count > 8)>> {
    using type = byte;
};

另请注意,我已将 void 替换为 std::enable_if_t<true>,因为它对 reader 更有意义。

另请注意,在 C++

中最好使用 using 别名(与 typedefs 相比)