template <size_t count, class T, class First, class ... Rest>
constexpr auto why_not(T && obj, First && f, Rest && ... r)
{
if constexpr (count == 42)
{
return the_answer(std::forward<T>(obj)) + to_everything();
}
else if constexpr (std::is_convertible_v<T, First> || std::is_convertible_v<First, T>)
{
return foo(std::forward<T>(obj), std::forward<First>(f)) + bar(std::forward<Rest>(r)...);
}
else
{
return why_not<count + 1, T, Rest...>(std::forward<T>(obj), std::forward<Rest>(r)...);
}
}