我有一个header文件,其功能很大程度上依赖于SFINAE的success。目前
g++ 4.6
它按预期工作。我是否应该假设,我的代码对于所有编译器(C++03 编译器)都会以相同的方式无缝运行?
我发现这是一个问题,因为如果有什么不同,它不会导致编译器错误,并且默默地改变代码流程。
是的,您可以依赖 SFINAE 来存在并正常运行。
如果你的编译器失败了,那么它最终是不符合规范的,无论如何,所有的赌注都会失败。
因为这取决于SFINAE的成功,所以您应该使用
static_assert
(或BOOST_STATIC_ASSERT
)来确保SFINAE成功通过。
我不知道您的代码是否适用于所有编译器,但如果特定编译器无法为特定 SFINAE 生成预期输出,则静态断言将使编译失败。