これがコードの一部です:
class Class
{
static constexpr int getBug();
};
constexpr int Class::getBug()
{
return 0;
}
私が基本的に行うことはstatic
constepxr
、クラス宣言でメソッドを宣言し、それを実装することです。
元のコードは2つのファイルに分割され、必要なコードのみを残して、削除されたメソッド/属性がさらに含まれていました。
コードをコンパイルすると、GCC4.6.0から次のエラーが発生します。
Class.cpp:6:29: internal compiler error: in merge_types, at cp/typeck.c:825
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
これは本当にバグですか?
その場合、レポートに何を提供する必要がありますか?
オンラインのC++0xコンパイラでコードをテストしたところ、次のエラーが発生しました。
prog.cpp:3:33: error: the 'constexpr' specifier cannot be used in a function declaration that is not a definition
prog.cpp:6:29: error: a constexpr function cannot be defined outside of its class
このコンパイラはGCC4.5.1を使用します。コードの形式が正しくないことを知らせてくれましたが、さらに質問があります。
- GCC 4.5.1でエラーが発生し、GCC 4.6.0でバグが報告されるのはなぜですか?
最後の段落を書いた後、GCC 4.6.0でstatic
キーワードを削除してテストし直したところ、別の実装が警告なしにコンパイルされました。
- 同じファミリの2つのコンパイラがこれほど異なる動作をするのはなぜですか?
メソッドは、GCC4.5.1エラー報告を説明する可能性のあるとはconstexpr
異なるステートメントを回避する必要があることを知っています。return
私のメソッドはマクロ条件を使用して適切な(定数)値を返すため、(通常の推奨事項に加えて)分離された実装を使用する理由を説明する数行が必要です。
私の構成:
Mac OS X.7
GCC 4.6.0
Target: x86_64-apple-darwin10.7.0
Configured with: ./configure
COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.7.0' '-v' '-save-temps' '-std=c++0x' '-c' '-shared-libgcc' '-mtune=core2'