在尝试回答一个由迈赫达德问题 ,我下面炮制的小功能(在行动liveworkspace ):
template <typename T, unsigned low, unsigned high>
static constexpr auto highest_index_in() ->
typename std::enable_if<high >= low, unsigned>::type
{
return low == high ? low :
high == low + 1 ? (exists<T, high>() ? high : low) :
exists<T, (high + low)/2>() ? highest_index_in<T, (high+low)/2, high>() :
highest_index_in<T, low, (high+low)/2>();
} // highest_index_in
(其中, exists
是O(1))
汇编是极其缓慢的,但(在liveworkspace),并尝试使用宽范围与编译器崩溃完全失败( [0, ~0u]
不工作...)。
我相信我设法正确执行递归(我很高兴能相矛盾),可是......
这样的问题: 评估各种三元运算时调用这里,可以在编译器中的Elid不采取分支的计算?