私は、clang 3.3を使ってかなり大きなコードをUbuntu 13.04のGCC 4.7.3標準ライブラリヘッダーファイルでコンパイルしようとしました。これはすべて1つの問題を除いてうまくいった。このコードはすでにこのマシン上の標準のUbuntu clang 3.2パッケージでコンパイルされていますので、これはclang 3.3コンパイラのいくつかの変更であると仮定しています。複合ヘッダーを使用するconstおよびconstexprに関する問題。特に、複合型は、私は、コードの最初のブロックに入るので、コンパイラはこれが本当のそのエラーを生成打ち鳴らすになりclang 3.3とGCC 4.7 const vのconstexpr
constexpr double real() { return __real__ _M_value; }
見ている私のコンパイルでは、コード
#ifdef __GXX_EXPERIMENTAL_CXX0X__
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 387. std::complex over-encapsulated.
constexpr double
real() { return __real__ _M_value; }
constexpr double
imag() { return __imag__ _M_value; }
#else
double&
real() { return __real__ _M_value; }
const double&
real() const { return __real__ _M_value; }
double&
imag() { return __imag__ _M_value; }
const double&
imag() const { return __imag__ _M_value; }
#endif
の次のブロックを持っていますメンバ関数は、私は次のポストDifference between `constexpr` and `const`を読んで、他のいくつかの類似した文書が、それでも本当にはっきりしていないよいる次
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/complex:1212:7:
note: candidate function not viable: 'this' argument has type 'const complex<double>',
but method is not marked const
real() { return __real__ _M_value; }
とCONSTされていませんこれがGCCヘッダーの問題またはclangコンパイラの問題の場合私の感想は、constexprとマークされたメンバ関数はコンパイラによってconstとして扱われ、clangが間違っているということです。
どのコンパイラ設定を使用していますか? –