C ++で列挙型をテンプレート(タイプ)引数として使用する際の制限/問題はありますか?
例:
enum MyEnum
{
A, B, C, D, E
};
template <typename _t>
class MyTemplate
{
public:
_t value;
void func(const _t& param) { /* .... */ }
};
// ....
MyTemplate<MyEnum> MyInstance;
Win32 /x86でVS2008(SP1)を介してMSVC ++を使用する実際の問題は、テンプレート引数として列挙型を使用するクラスに関連するいくつかのコンパイルエラー(=コンパイラによって報告されるエラー)です。残念ながら、私のプロジェクトは少し複雑になっているため(設計エラー:Pと見なすことができます)、これらのエラーを発生させるテンプレートクラスは派生し、ネストされ、enumテンプレートパラメーターを持つクラスに特化されています。
ビルドしようとすると、コンパイラはコメントしかない行に「C2059:構文エラー:'public'」などの多くの間違った/役に立たないエラーを報告します。それらの多くは、例のconst _t&paramを_tに置き換える(つまり、パラメーターをコピーする)ことで修正できますが、これらのエラーをすべて修正することも、これが「役立つ」理由の手がかりもありません。 。**私は知っています、上記の簡単な例はエラーなしでコンパイルします。
enumの代わりにintを使用して、私のプロジェクトはエラーなしでコンパイルします。
ヒントやヒントを事前に感謝します!
編集:
結局のところ、私はこれをコンパイラのバグと真剣に考えています。簡略化されたコードでエラーを再現しようとすると、すべての「ビルド」の50%でしかエラーが発生せず、決定論的ではありませんでした。
たとえば、コンパイルしようとすると、これらのエラーが報告されました。再構築-変更なし。コメントを削除し、ビルドします-変更はありません。再構築-そして:エラーなし、正常にコンパイルされます。
私はすでにいくつかのコンパイラのバグに遭遇しました(2または3は2万行のコード内だと思います)が、これは私には非常に奇妙に思えます。それがコンパイラ であるか
どうかを判断する方法について何か提案はありますか?