20 lines
500 B
C++
20 lines
500 B
C++
#pragma once
|
|
|
|
#include <utility>
|
|
|
|
template<typename F, bool... Values>
|
|
auto unroll_bool_function_template(F&& f)
|
|
{
|
|
return f.template operator()<Values...>();
|
|
}
|
|
|
|
template<typename F, bool... Values, typename Bool, typename... Bools>
|
|
auto unroll_bool_function_template(F&& f, const Bool b, const Bools... bs)
|
|
{
|
|
if (b)
|
|
{
|
|
return unroll_bool_function_template<F, Values..., true>(std::forward<F>(f), bs...);
|
|
}
|
|
return unroll_bool_function_template<F, Values..., false>(std::forward<F>(f), bs...);
|
|
}
|