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