我有一个标头文件,其功能在很大程度上依赖于SFINAE的成功。目前g++ 4.6
它按预期工作。我是否应该假设,我的代码将以相同的方式为所有编译器(C ++ 03编译器)无缝地运行?
我发现这是一个问题,因为如果某些内容不同,将不会导致编译器错误,并且会默默地更改代码流。
答案 0 :(得分:4)
是的,您可以依赖SFINAE存在并正常运作。
如果您的编译器失败了,那么它最终不符合要求,并且所有投注都是关闭的。
答案 1 :(得分:0)
由于它取决于SFINAE的成功,您应该使用static_assert
(或BOOST_STATIC_ASSERT
)来确保SFINAE成功通过。
我不知道您的代码是否适用于所有编译器,但如果特定编译器无法为特定SFINAE生成预期输出,静态断言将无法编译。