typename... T_extras>
struct tuple_for_each_impl {
template <typename T>
- static void
+ constexpr
+ static
+ void
tuple_for_each(T&& t, T_extras&&... extras) {
//We use std::decay_t<> because tuple_size is not defined for references.
constexpr auto size = std::tuple_size<std::decay_t<T>>::value;
template <template <typename> class T_visitor, typename... T_extras>
struct tuple_for_each_impl<T_visitor, 1, T_extras...> {
template <typename T>
- static void
+ constexpr
+ static
+ void
tuple_for_each(T&& t, T_extras&&... extras) {
//We use std::decay_t<> because tuple_size is not defined for references.
constexpr auto size = std::tuple_size<std::decay_t<T>>::value;
template <template <typename> class T_visitor, typename... T_extras>
struct tuple_for_each_impl<T_visitor, 0, T_extras...> {
template <typename T>
- static void
+ constexpr
+ static
+ void
tuple_for_each(T&& /* t */, T_extras&&... /* extras */) {
//Do nothing because the tuple has no elements.
}
* @param extras Any extra arguments to pass to @e T_Visitor's visit() method.
*/
template <template <typename> class T_visitor, typename T, typename... T_extras>
+constexpr
void
tuple_for_each(T&& t, T_extras&&... extras) {
//We use std::decay_t<> because tuple_size is not defined for references.