2011-11-09 9 views
1

私はヘッダーファイルを持っています。その機能は、SFINAEの成功に大きく依存しています。現時点ではg++ 4.6として期待通りに動作します。私はそれを仮定すれば、私のコードはすべてのコンパイラ(C++ 03コンパイラ)と同じ方法でシームレスに動作するでしょうか? になりませんので、コンパイラエラーが発生し、コードフローが黙って変更されることがあります。C++(03)SFINAEアスペクトコンパイラは独立していますか?

+2

すべてのコンパイラはいつからですか? "All"はかなり大きいです... –

+0

@OliCharlesworth、編集私はC++ 03準拠のコンパイラを意味しました。 – iammilind

+0

SFINAEだけではないという疑いがあります。もちろん、SFINAEは動作する必要があります。しかし、コンパイラのサポートが変わるところがあるかもしれません(メンバ関数の部分的な専門化を念頭に置いてあります)。 – sehe

答えて

4

はい、SFINAEを使用して正しく機能することができます。

コンパイルに失敗した場合は、最終的には不適合で、すべてのベットはオフになっています。

+1

バグのない100%標準準拠のコンパイラはありますか? :P –

+0

@VJo:SFINAEが動作しないのはバグ以上のことです。 –

+2

しかしそれは合理的な点です。まさに「SFINAEは、すべてのベットがオフになっている非準拠のコンパイラを除いて動作します」と言うことができます。「2フェーズルックアップは、すべてのベットがオフになっている非適合コンパイラを除いて動作します。残念ながら、私たちの多くはTNCCWABAO:Visual C++を扱わなければなりません。 「これは、主要なコンパイラベンダーが動作させることができない2フェーズルックアップのような領域ですか?」と尋ねることは合理的だと思います。これはiammalindが尋ねたことではなく、 "C++ 03準拠"を明確にしましたが、準拠しているコンパイラがほとんど存在しないことを認識していない可能性があります。 Ahemの '輸出'。 –

0

SFINAEの成功に依存するため、SFINAEが正常に渡されたことを確認するには、static_assert(またはBOOST_STATIC_ASSERT)を使用する必要があります。

コードが上のすべてのコンパイラをうまくいくかどうかは知りませんが、特定のコンパイラは、特定のSFINAEの予想される出力を生成するために失敗した場合は、静的アサートがコンパイルを失敗していました。

+0

残念ながら、 'asserts'を使用しても問題は解決しません。私が知りたいのは、C++ 03準拠のコンパイラであれば、SFINAEは正確に同じ方法で動作するかどうかです。 – iammilind

関連する問題