#pragma once #include #include #include #include BEGIN_CS_NAMESPACE #if __cplusplus >= 201703L namespace compat { using std::byte; using std::in_place; using std::in_place_t; using std::in_place_type; using std::in_place_type_t; } // namespace compat #else namespace compat { struct in_place_t { explicit in_place_t() = default; }; static in_place_t in_place {}; template struct in_place_type_t { explicit in_place_type_t() = default; }; template static in_place_type_t in_place_type {}; enum class byte : unsigned char {}; } // namespace compat #endif #if __cplusplus >= 202002L namespace compat { using std::remove_cvref; } // namespace compat #else namespace compat { template struct remove_cvref { using type = typename std::remove_cv::type>::type; }; } // namespace compat #endif END_CS_NAMESPACE