Microsoft Visual Studio 2019コンパイラ(cl.exe)を使用していますが、テンプレートが特定の列挙値に特化されているテンプレートパラメータとして列挙型を使用することに関連して、ClangとGCCの両方で受け入れられる一部のコードを拒否しています。
enum Foo {
Bar,
Baz
};
template<enum Foo = Bar> class Clazz {
};
template<> class Clazz<Baz> {
};
VC ++コンパイラは、テンプレートの特殊化に関するいくつかのエラーを報告します。
<source>(10): error C2440: 'specialization': cannot convert from 'Foo' to 'Foo'
<source>(10): note: Conversion to enumeration type requires an explicit cast (static_cast, C-style cast or function-style cast)
このコードは、ClangとGCCの両方でエラーなしで受け入れられます。これはVC ++のバグですか?
テンプレート宣言の「enum Foo」を単に「int」に置き換えると、エラーが発生しなくなります。ただし、大規模なコードベースをVC ++に移植しようとしているため、これは許容できる回答ではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加