Skip to content

Commit

Permalink
Merge pull request #100 from steve-downey/dup-funcs
Browse files Browse the repository at this point in the history
Remove redundant overloads on is_convertible
  • Loading branch information
steve-downey authored Jan 18, 2025
2 parents 2f944fa + cb33563 commit b383b1a
Showing 1 changed file with 6 additions and 52 deletions.
58 changes: 6 additions & 52 deletions include/beman/optional26/optional.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -276,29 +276,15 @@ class optional {

template <class U>
constexpr explicit(!std::is_convertible_v<U, T>) optional(const optional<U>& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&> &&
std::is_convertible_v<const U&, T>);

template <class U>
constexpr explicit(!std::is_convertible_v<U, T>) optional(const optional<U>& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&> &&
!std::is_convertible_v<const U&, T>);
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&>);

template <class U>
constexpr explicit(!std::is_convertible_v<U, T>) optional(optional<U>&& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&> && std::is_convertible_v<U &&, T>);

template <class U>
constexpr explicit(!std::is_convertible_v<U, T>) optional(optional<U>&& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&> && !std::is_convertible_v<U &&, T>);

template <class U>
constexpr explicit(!std::is_convertible_v<U&, T>) optional(const optional<U&>& rhs)
requires(detail::enable_from_other<T, U&, U&> && std::is_convertible_v<U&, T>);
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&>);

template <class U>
constexpr explicit(!std::is_convertible_v<U&, T>) optional(const optional<U&>& rhs)
requires(detail::enable_from_other<T, U&, U&> && !std::is_convertible_v<U&, T>);
requires(detail::enable_from_other<T, U&, U&>);

// \ref{optional.dtor}, destructor
constexpr ~optional()
Expand Down Expand Up @@ -477,19 +463,7 @@ inline constexpr optional<T>::optional(U&& u)
template <class T>
template <class U>
inline constexpr optional<T>::optional(const optional<U>& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&> &&
std::is_convertible_v<const U&, T>)
{
if (rhs.has_value()) {
construct(*rhs);
}
}

template <class T>
template <class U>
inline constexpr optional<T>::optional(const optional<U>& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&> &&
!std::is_convertible_v<const U&, T>)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, const U&>)
{
if (rhs.has_value()) {
construct(*rhs);
Expand All @@ -500,37 +474,17 @@ inline constexpr optional<T>::optional(const optional<U>& rhs)
template <class T>
template <class U>
inline constexpr optional<T>::optional(optional<U>&& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&> && std::is_convertible_v<U &&, T>)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&>)
{
if (rhs.has_value()) {
construct(std::move(*rhs));
}
}

template <class T>
template <class U>
inline constexpr optional<T>::optional(optional<U>&& rhs)
requires(!std::is_reference_v<U> && detail::enable_from_other<T, U, U &&> && !std::is_convertible_v<U &&, T>)
{
if (rhs.has_value()) {
construct(std::move(*rhs));
}
}

template <class T>
template <class U>
inline constexpr optional<T>::optional(const optional<U&>& rhs)
requires(detail::enable_from_other<T, U&, U&> && std::is_convertible_v<U&, T>)
{
if (rhs.has_value()) {
construct(*rhs);
}
}

template <class T>
template <class U>
inline constexpr optional<T>::optional(const optional<U&>& rhs)
requires(detail::enable_from_other<T, U&, U&> && !std::is_convertible_v<U&, T>)
requires(detail::enable_from_other<T, U&, U&>)
{
if (rhs.has_value()) {
construct(*rhs);
Expand Down

0 comments on commit b383b1a

Please sign in to comment.