10
constexpr int get () { return 5; }
template<int N> struct Test {};

int main ()
{
  int a[get()];  // ok
  Test< get() > obj;  // error:'int get()' cannot appear in a constant-expression
}

私はこのコードをideoneでコンパイルしました。そして、なぜそれがコンパイルエラーを引き起こしているのか疑問に思いました。constexpr関数は引数として許可されていませんかtemplate、それともコンパイラのバグですか?

編集:に変更const int get()さらにint get() 、ideoneにはもう1つのバグconstexprがあります。削除しても、配列の宣言が許可されます。それはC99の機能だと思います。

4

1 に答える 1

13

GCC 4.5 (少なくとも Ideone で使用されているバージョン) はconstexpr、有効な使用法を含め、完全にはサポートしていません。それはに水をまきconstます。GCC 4.6 以降では正しくサポートされています。

于 2011-06-15T07:29:29.727 に答える