2011-11-09 37 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