GCC4.4.3のエラーメッセージ。
error: a call to a constructor cannot appear in a constant-expression
error: template argument 1 is invalid
エラーを再現するコードは、たとえばこんな感じ。
template
class Foo {
};
void bar() {
void * p = new Foo< Foo< Foo< Foo> >();
}
>が一個足りないことに気がつくまで、小一時間悩んだ。
悩んでいる間は
「このエラーメッセージは一体何を言いたいんじゃい!」
と思っていたが、問題が理解できてからエラーメッセージを見直すと
なんとなく分からんでもない。
new Foo< の後に来るものは「a constant-expression」で
Foo< Foo< Foo
そういうつもりで書いたわけじゃないんだが
そういう風に読むことも可能だ。