我有一个头文件,其功能在很大程度上依赖于SFINAE的成功。在目前g++ 4.6
它按预期工作。我应该以为,我的代码的行为无缝地以同样的方式为所有的编译器(C++编译器03)?是C++(03)SFINAE方面编译器独立吗?
我觉得这是一个问题,因为如果有什么不同,将不会导致编译器错误,并会默默地改变代码流。
我有一个头文件,其功能在很大程度上依赖于SFINAE的成功。在目前g++ 4.6
它按预期工作。我应该以为,我的代码的行为无缝地以同样的方式为所有的编译器(C++编译器03)?是C++(03)SFINAE方面编译器独立吗?
我觉得这是一个问题,因为如果有什么不同,将不会导致编译器错误,并会默默地改变代码流。
是的,你可以依靠SFINAE正常存在和功能。
如果你有一个编译器失败的话,那么它的末端不符合标准的,所有的赌注都关闭反正。
是否有100%符合标准的编译器没有错误? :P –
@VJo:SFINAE不工作不仅仅是一个bug。 –
虽然这是一个合理的观点。就如我们会说,“SFINAE作品除了在末端不符合标准的编译器,所有的赌注都关闭”,我们可以说,“两阶段查找工作除了在末端不符合标准的编译器,所有的赌注都关闭”。不幸的是,我们很多人不得不处理TNCCWABAO:Visual C++。我认为有必要问一下,“这是一个像两阶段查询那样的领域,其中一个主要的编译器供应商无法实现它的工作吗?”。这不是iammalind所问的,他澄清了“C++ 03符合”,但可能没有意识到存在少量符合的编译器。 Ahem'出口'。 –
由于它取决于SFINAE的成功,因此应使用static_assert
(或BOOST_STATIC_ASSERT
)确保SFINAE成功通过。
我不知道,如果你的代码将在所有编译工作,但如果一个特定的编译器无法产生预期的输出特定SFINAE静态断言将失败的编译。
不幸的是,使用'asserts'并不能解决我的问题。我想知道,如果有任何符合C++ 03的编译器,SFINAE应该以完全相同的方式工作。 – iammilind
所有的编译器,因为什么时候? “全部”是相当大的... –
@OliCharlesworth,编辑我的意思是符合C++ 03的编译器。 – iammilind
我怀疑你的意思不仅仅是SFINAE。当然SFINAE需要工作。然而,可能有些地方的编译器支持各不相同(想到会员函数的部分专业化) – sehe