#pragma once #include "macros1.h" #include #include // before C++20 namespace cxx20_compat { template struct remove_cvref { using type = std::remove_cv_t>; }; } // ns cxx20_compat template using remove_cvref_t = typename cxx20_compat::remove_cvref::type; template using to_const_ref_t = std::add_lvalue_reference_t>>; template using cv_qualified = std::conditional_t) <= sizeof(void*)*4 && std::is_trivially_copyable_v || std::is_fundamental_v>, remove_cvref_t, to_const_ref_t>;