Replace enable_if with concepts (#106)

This commit is contained in:
Dr. Patrick Urbanke (劉自成)
2025-12-08 00:13:11 +01:00
committed by GitHub
parent 758bb1d87e
commit ba39bb2730
4 changed files with 28 additions and 38 deletions

View File

@@ -47,14 +47,12 @@ struct ForeignKey {
ForeignKey(const ForeignKey& _other) = default;
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
ForeignKey(const U& _value) : value_(_value) {}
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
ForeignKey(U&& _value) noexcept : value_(std::forward<U>(_value)) {}
~ForeignKey() = default;
@@ -78,9 +76,8 @@ struct ForeignKey {
}
/// Assigns the underlying object.
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
auto& operator=(const U& _value) {
value_ = _value;
return *this;

View File

@@ -27,16 +27,16 @@ class JSON {
template <class U>
JSON(JSON<U>&& _other) : value_(_other.get()) {}
template <class U, typename std::enable_if<std::is_convertible_v<U, T>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, T>
JSON(const U& _value) : value_(_value) {}
template <class U, typename std::enable_if<std::is_convertible_v<U, T>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, T>
JSON(U&& _value) noexcept : value_(std::forward<U>(_value)) {}
template <class U, typename std::enable_if<std::is_convertible_v<U, T>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, T>
JSON(const JSON<U>& _other) : value_(_other.value()) {}
~JSON() = default;
@@ -60,8 +60,8 @@ class JSON {
}
/// Assigns the underlying object.
template <class U, typename std::enable_if<std::is_convertible_v<U, T>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, T>
auto& operator=(const U& _value) {
value_ = _value;
return *this;

View File

@@ -36,19 +36,16 @@ struct PrimaryKey {
template <class U, bool _other_auto_incr>
PrimaryKey(PrimaryKey<U, _other_auto_incr>&& _other) : value_(_other.get()) {}
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
PrimaryKey(const U& _value) : value_(_value) {}
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
PrimaryKey(U&& _value) noexcept : value_(std::forward<U>(_value)) {}
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
PrimaryKey(const PrimaryKey<U>& _other) : value_(_other.value()) {}
~PrimaryKey() = default;
@@ -72,9 +69,8 @@ struct PrimaryKey {
}
/// Assigns the underlying object.
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
auto& operator=(const U& _value) {
value_ = _value;
return *this;

View File

@@ -25,14 +25,12 @@ struct Unique {
Unique(const Unique& _other) = default;
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
Unique(const U& _value) : value_(_value) {}
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
Unique(U&& _value) noexcept : value_(std::forward<U>(_value)) {}
~Unique() = default;
@@ -56,9 +54,8 @@ struct Unique {
}
/// Assigns the underlying object.
template <class U,
typename std::enable_if<std::is_convertible_v<U, ReflectionType>,
bool>::type = true>
template <class U>
requires std::is_convertible_v<U, ReflectionType>
auto& operator=(const U& _value) {
value_ = _value;
return *this;