Почему следующая функция шаблона
template<typename T>
bool isEqual(const T &v0, const T &v1)
{
return v0 == v1;
}
не компилируется, когда v1 и v2 перечислены? Как я могу написать функцию шаблона, которая сравнивает переменную с enum: isEqual(color, RED)
?
template<typename T>
bool isEqual(const T &v0, const T &v1)
{
return v0 == v1;
}
int main()
{
enum Enum
{
E1,
E2,
E3
} v1, v2;
v1 = E1;
v2 = E1;
isEqual(v1, v2);
}
TestProject/main.cpp: В функции 'int main()': TestProject/main.cpp: 31: ошибка: нет соответствующей функции для вызова 'isEqual (main() :: Enum &, main() :: Enum &)'
Вероятно, это означает, что ваш компилятор устарел.
До С++ 11 типы без привязки (например, типы, объявленные внутри функции) не могли использоваться в качестве аргументов шаблона. Это довольно странное ограничение теперь удалено.
Ваш пример должен быть скомпилирован, если вы переместите объявление enum
в область пространства имен (давая ему внешнюю ссылку) или используйте современный компилятор: http://ideone.com/QZQjHI