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;
};
錯誤是因爲解析器在隨機8
之後看到第二個模板參數爲enable_if_t<bits_count >
。這個條件如何被放入模板部分專業化?
很明顯,解決方案可以將enable_if_t
的參數替換爲bits_count >= 9
,但是可以做些事情來保留原始表達式,這樣對未來的讀者會有意義嗎?
'void'是明確的。命名參數'Enabler'或'AlwaysVoid'會使模式更清晰。 – Jarod42