原則として、これはおそらく未定義の動作であることを私は知っていますが、大規模なプロジェクトを処理するために、GCCに関する私の質問は次のとおりです。
まったく同じコンパイラインストールを使用して、 1つの変換ユニットをでコンパイルしgcc -std=c++98
、別の変換ユニットをでコンパイルするとします。-std=c++11
2つのオブジェクトファイルをリンクして、明確に定義されたプログラムを取得できるという保証はありますか?
私の知る限り、潜在的な問題は、マクロが異なるためにライブラリヘッダーのさまざまなビューからのみ発生する可能性があり、それらはせいぜい新しいメンバー関数を追加しますが、メンバーオブジェクトは標準ライブラリクラスに追加しません。
これはどういうわけか、異なる言語の方言オプションを使用して、より大きなプロジェクトの異なる部分をコンパイルすることを許容できるでしょうか?
更新:直交する質問を追加する必要があります:GCCの2つの異なるバージョン(たとえば4.3と4.6)を使用するのはどうですか?ただし、同じ方言オプション(-std=c++98
)はありますか?このGCCドキュメントのリストは、ライブラリが4.2.2と4.6の間の両方向で互換性があることを示唆しているようです。