cs-midi/MIDI_Interfaces/BLEMIDI/Util/compat.hpp

58 lines
970 B
C++

#pragma once
#include <Settings/NamespaceSettings.hpp>
#include <cstddef>
#include <type_traits>
#include <utility>
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 <class T>
struct in_place_type_t {
explicit in_place_type_t() = default;
};
template <class T>
static in_place_type_t<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 <class T>
struct remove_cvref {
using type =
typename std::remove_cv<typename std::remove_reference<T>::type>::type;
};
} // namespace compat
#endif
END_CS_NAMESPACE