34template <
template <
typename...>
typename T,
typename... Args,
typename F>
35constexpr void for_each(T<Args...>, F f)
37 (f.template operator()<Args>(), ...);
40template <
template <
typename...>
typename T,
typename... Args,
typename F>
41constexpr void for_each_tagged(T<Args...>, F f)
43 (f(type_tag<Args>{}), ...);
46template <
typename... Args,
typename F>
47constexpr void for_each_type(F f)
49 (f.template operator()<Args>(), ...);
52template <
template <
typename...>
typename T,
typename... Args,
typename F>
53constexpr void for_each_type(T<Args...>, F f)
55 (f.template operator()<Args>(), ...);
58template <
typename... Args,
typename F>
59constexpr void for_each_type_tagged(F f)
61 (f(type_tag<Args>{}), ...);
66template <
typename... Args,
typename F>
67constexpr void for_each_type_if(F&& f)
69 (f.template operator()<Args>() || ...);
72template <
typename... Args,
typename F>
73constexpr void for_each_type_if_tagged(F&& f)
75 (f(type_tag<Args>{}) || ...);