如果我编译以下代码:
#include <boost/range/irange.hpp>
template<class Integer>
auto iota(Integer last)
{
return boost::irange(0, last);
}
template<class Integer, class StepSize>
auto iota(Integer last, StepSize step_size)
{
return boost::irange(0, last, step_size);
}
int main( )
{
int y = 0;
for (auto x : iota(5))
y += x;
return y;
}
使用 clang 3.9.0 和 GCC 6.3.0 at -O1
,我得到了 GCC 的完全优化(只返回最终结果)和大量的 clang 输出代码。请参阅GodBolt 上的这个实验。但是,如果我将 clang 切换到-O2
,它也会编译所有内容。
两种编译器模式之间的优化差异-O1
会导致这种情况发生吗?