detach(package: xgboost)
错误是因为解析器在随机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
,但是可以做些什么来保留原始表达式,以便它对未来的读者有意义吗?
答案 0 :(得分:4)
您应该添加额外的括号来解释编译器的含义:
template<size_t bits_count>
struct best_type<bits_count,enable_if_t<(bits_count > 8)>> {
typedef byte type;
};
答案 1 :(得分:1)
将条件放在括号中。
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>
,因为它对读者更有意义。
另请注意,在C ++中使用using
别名(与typedef
s)相比更好