#ifndef RFL_AS_HPP_ #define RFL_AS_HPP_ #include "from_named_tuple.hpp" #include "make_named_tuple.hpp" #include "to_named_tuple.hpp" namespace rfl { /// Generates a type T from the input values. template T as(Head&& _head, Tail&&... _tail) { if constexpr (sizeof...(_tail) == 0) { return from_named_tuple(to_named_tuple(std::forward(_head))); } else { return from_named_tuple( to_named_tuple(std::forward(_head)).add(to_named_tuple(std::forward(_tail))...) ); } } /// Generates a type T from the input values. template T as(const Head& _head, const Tail&... _tail) { if constexpr (sizeof...(_tail) == 0) { return from_named_tuple(to_named_tuple(_head)); } else { return from_named_tuple(to_named_tuple(_head).add(to_named_tuple(_tail)...)); } } } // namespace rfl #endif