constexpr
次のように変数テンプレートを前方宣言しようとしました。
template<typename>
constexpr std::size_t iterator_category_value;
目標は、すべての特殊化が必要であることを文書化することconstexpr
でしたが、それが合法であるかどうかを確認したことがなく、g++ はそれに満足していたことを認めなければなりません。しかし、代わりにこのスピンネットを clang++ でコンパイルしようとすると、次のエラーが発生しました。
error: default initialization of an object of const type 'const std::size_t' (aka 'const unsigned long') constexpr std::size_t iterator_category_value; ^ = 0
エラーは理にかなっており、削除constexpr
すると消えるため、実際の問題ではありません。しかし、私は今興味があります: 標準constexpr
は変数テンプレートに対してそのような前方宣言を許可していますか?それとも違法ですか? g++ と clang++ は一致していないようで、必要に応じてどこにバグ レポートを提出すればよいか知りたいです。
どちらもconstepxr
、変数テンプレートではない前方宣言された変数について不平を言っているため、変数テンプレートのコンテキストがコンパイラの意見を異にしているようです。