Примите во внимание следующее:
enum color {
r, g, b
};
template <color T>
constexpr bool is_green = std::is_same<T, color::g>::value;
g ++ не может скомпилировать это, ошибка с
ошибка: несоответствие типа / значения в аргументе 1 в списке параметров шаблона для template<class, class> struct std::is_same
Вполне приемлемо объявить шаблонный класс, используя параметр enum как
template <color foo>
class widget
, поэтому, похоже, что также должен быть какой-то способ проверить значение ( для последующего использования в условном выражении; static_if
было бы неплохо, но для этого требуется c ++ 17).