1

我有一个文件,它的功能很大程度上依赖于 SFINAE 的成功。目前g++ 4.6它按预期工作。我是否应该假设,对于所有编译器(C++03 编译器),我的代码将以相同的方式无缝运行?

我发现这是一个问题,因为如果有什么不同,它不会导致编译器错误,并且会默默地改变代码流。

4

2 回答 2

4

是的,您可以依靠 SFINAE 的存在和正常运作。

如果你有一个编译器失败了,那么它最终是不符合标准的,无论如何所有的赌注都没有了。

于 2011-11-09T10:29:59.713 回答
0

由于它取决于 SFINAE 的成功,因此您应该使用static_assert(或BOOST_STATIC_ASSERT)来确保 SFINAE 成功通过。

我不知道您的代码是否适用于所有编译器,但如果特定编译器无法为特定 SFINAE 生成预期输出,则静态断言将使编译失败。

于 2011-11-09T10:27:10.727 回答