2013-08-06 6 views
5

gccが新しく、gcc-4.7.2/4.7.3のプリコンパイル済みヘッダーをコンパイルする際に、本当に奇妙な問題が発生しています。以下コピーコンストラクタはpchのconstメンバー関数と競合しますか? gccのバグ?

コード:

g++ -Wall -fexceptions -g -msse4.1 -Winvalid-pch -include "FooClass.h" -c FooClass.h -o FooClass.h.gch 
g++ -Wall -fexceptions -g -msse4.1 -Winvalid-pch -include "FooClass.h" -c FooClass.cpp -o obj/Debug/FooClass.o 

生成されたエラー:

FooClass.h

#include <cstddef> 
#include <X11/X.h> 
#include <xmmintrin.h> 
#include <emmintrin.h> 
#include <smmintrin.h> 

#ifndef FOO_CLASS_ERROR 
#define FOO_CLASS_ERROR 

class FooClass 
{ 
public: 
    union 
    { 
     struct 
     { 
      float x,y,z,w; 
     }; 
     __m128 v; 
    }; 

    FooClass(void) 
    { 
    } 

    FooClass(const __m128 _v) 
    : v(_v) 
    { 
    } 

    FooClass(const FooClass& rhs) 
    : v(rhs.v) 
    { 
    } 

    FooClass operator -(void) const; 

} __attribute__((aligned(16))); 

#endif 

FooClass.cppは

#include "FooClass.h" 

FooClass FooClass::operator -(void) const 
{ 
    return FooClass(); 
} 

PCHとしてコンパイル

./pch.h:40:17: error: prototype for ‘FooClass FooClass::operator-() const’ does not match any in class ‘FooClass’ 
./pch.h:36:14: error: candidate is: FooClass FooClass::operator-() const 

私は、全体の午後をチェックし、検出されませんでした:「CONST」またはコピーコンストラクタを削除

は、これらのエラーを解決します。

しかし、私は理由を知らない...誰かが私にこのエラーの原因を教えてもらえますか?それともgccのバグでしょうか?

+2

'FooClass.h'を変更した後で、プリコンパイルされたヘッダーを再作成したことを確認してください。診断のようなサウンドは、実際のヘッダーとPCHの間のデシンクによってわずかなバグがあります。つまり、新しいビルド_を行い、その結果をお知らせください。 –

+2

これは問題ではありませんが、2つの連続したアンダースコア( '__FooClass__')とアンダースコアで始まり大文字で始まる名前は実装に予約されています。それらを使用しないでください。 –

+0

はい、私はきれいなビルドをしました。そして、悪いコードスタイルには申し訳ありませんが、この問題を再現できる最小のコードを作成しようとしているので、コードスタイルは無視してください:-) –

答えて

0

これは非常に奇妙なエラーです。

FooClass operator -(void) const 
{ 
    return FooClass(); 
} 
関連する問題