#pragma once #include "asl/meta/types.hpp" namespace asl::internal { template inline constexpr bool is_referenceable = false; template inline constexpr bool is_referenceable> = true; template> struct as_ref_helper { using lvalue = T; using rvalue = T; }; template struct as_ref_helper { using lvalue = T&; using rvalue = T&&; }; template struct un_ref_helper { using type = T; }; template struct un_ref_helper { using type = T; }; template struct un_ref_helper { using type = T; }; template struct is_ref_helper { static inline constexpr bool lref = false; static inline constexpr bool rref = false; }; template struct is_ref_helper { static inline constexpr bool lref = true; static inline constexpr bool rref = false; }; template struct is_ref_helper { static inline constexpr bool lref = false; static inline constexpr bool rref = true; }; } // namespace asl::internal