Существуют ли какие-либо ограничения / проблемы с использованием аргумента enum в качестве шаблона (типа) в C ++?
Пример:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
Моя настоящая проблема с использованием MSVC ++ через VS 2008 (SP1) в Win32 / x86 есть несколько ошибок компиляции (= ошибки, сообщенные компилятором) в сочетании с классами, использующими перечисления в качестве аргументов шаблона.Поскольку мой проект, к сожалению, стал немного сложным (вы можете считать это ошибкой проектирования: P), классы шаблонов, вызывающие эти ошибки, являются производными, вложенными и даже специализированными для класса с параметром шаблона enum.
При попытке сборки компилятор сообщает о многих неправильных / бесполезных ошибках, таких как «C2059: синтаксическая ошибка:« публичная »» в строках, где есть только комментарий.Многие из них я мог бы исправить, заменив в методах, аналогичных приведенному в примере, const _t & param на _t (т. Е. Скопировав параметр), но я не смог исправить все эти ошибки и не понял, почему это «помогает»,** Я знаю, простой пример выше компилирует без ошибок.
Используя int вместо enum, мой проект компилирует без ошибок.
Заранее благодарен за любой совет или подсказку!
Редактировать :
В конце концов, я серьезно считаю это ошибкой компилятора.Когда я пытался воспроизвести ошибки с упрощенным кодом, я получил их только в 50% всех «сборок», не очень детерминированных:
Например, попытался скомпилировать, и он сообщил об этих ошибках.Перестроить - без изменений.Удален комментарий, сборка - без изменений.Перестройте - и потом: ошибок нет, компилируется нормально.
Я уже встречал несколько ошибок компилятора (2 или 3, я думаю, в пределах 20 000 строк кода), но эта мне кажется очень странной.
Любые предложения, как выяснить, если это это компилятор?