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、変数テンプレートではない前方宣言された変数について不平を言っているため、変数テンプレートのコンテキストがコンパイラの意見を異にしているようです。