2011-11-09 36 views
1

我有一個文件,其功能在很大程度上依賴於SFINAE的成功。在目前g++ 4.6它按預期工作。我應該以爲,我的代碼的行爲無縫地以同樣的方式爲所有的編譯器(C++編譯器03)?是C++(03)SFINAE方面編譯器獨立嗎?

我覺得這是一個問題,因爲如果有什麼不同,將不會導致編譯器錯誤,並會默默地改變代碼流。

+2

所有的編譯器,因爲什麼時候? 「全部」是相當大的... –

+0

@OliCharlesworth,編輯我的意思是符合C++ 03的編譯器。 – iammilind

+0

我懷疑你的意思不僅僅是SFINAE。當然SFINAE需要工作。然而,可能有些地方的編譯器支持各不相同(想到會員函數的部分專業化) – sehe

回答

4

是的,你可以依靠SFINAE正常存在和功能。

如果你有一個編譯器失敗的話,那麼它的末端不符合標準的,所有的賭注都關閉反正。

+1

是否有100%符合標準的編譯器沒有錯誤? :P –

+0

@VJo:SFINAE不工作不僅僅是一個bug。 –

+2

雖然這是一個合理的觀點。就如我們會說,「SFINAE作品除了在末端不符合標準的編譯器,所有的賭注都關閉」,我們可以說,「兩階段查找工作除了在末端不符合標準的編譯器,所有的賭注都關閉」。不幸的是,我們很多人不得不處理TNCCWABAO:Visual C++。我認爲有必要問一下,「這是一個像兩階段查詢那樣的領域,其中一個主要的編譯器供應商無法實現它的工作嗎?」。這不是iammalind所問的,他澄清了「C++ 03符合」,但可能沒有意識到存在少量符合的編譯器。 Ahem'出口'。 –

0

由於它取決於SFINAE的成功,因此應使用static_assert(或BOOST_STATIC_ASSERT)確保SFINAE成功通過。

我不知道,如果你的代碼將在所有編譯工作,但如果一個特定的編譯器無法產生預期的輸出特定SFINAE靜態斷言將失敗的編譯。

+0

不幸的是,使用'asserts'並不能解決我的問題。我想知道,如果有任何符合C++ 03的編譯器,SFINAE應該以完全相同的方式工作。 – iammilind