Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ repos:
# This brings in a portable version of clang-format.
# See also: https://github.com/ssciwr/clang-format-wheel
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v22.1.8
rev: v23.1.1
hooks:
- id: clang-format
types_or: [c++, c]
Expand All @@ -23,7 +23,7 @@ repos:

# CMake linting and formatting
- repo: https://github.com/BlankSpruce/gersemi-pre-commit
rev: 0.28.0
rev: 0.29.1
hooks:
- id: gersemi
name: CMake linting
Expand Down
36 changes: 18 additions & 18 deletions include/beman/expected/expected.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,9 @@ class expected {
std::is_constructible_v<E, const G&> &&
(std::is_same_v<bool, std::remove_cv_t<T>> || !detail::converts_from_any_cvref<T, expected<U, G>>) &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr explicit(!std::is_convertible_v<const U&, T> || !std::is_convertible_v<const G&, E>)
expected(const expected<U, G>& rhs);

Expand All @@ -189,9 +189,9 @@ class expected {
requires(!std::is_reference_v<E> && std::is_constructible_v<T, U> && std::is_constructible_v<E, G> &&
(std::is_same_v<bool, std::remove_cv_t<T>> || !detail::converts_from_any_cvref<T, expected<U, G>>) &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr explicit(!std::is_convertible_v<U, T> || !std::is_convertible_v<G, E>) expected(expected<U, G>&& rhs);

// Converting constructor from expected<U, G> — reference-E path: only accepts sources
Expand All @@ -203,7 +203,7 @@ class expected {
expected(const expected<U, G>& rhs);

template <class U, class G>
requires(std::is_reference_v<E> && std::is_reference_v<G> && std::is_constructible_v<T, U &&> &&
requires(std::is_reference_v<E> && std::is_reference_v<G> && std::is_constructible_v<T, U&&> &&
std::is_convertible_v<G, E>)
constexpr explicit(!std::is_convertible_v<U&&, T> || !std::is_convertible_v<G, E>) expected(expected<U, G>&& rhs);

Expand Down Expand Up @@ -587,9 +587,9 @@ template <class U, class G>
requires(!std::is_reference_v<E> && std::is_constructible_v<T, const U&> && std::is_constructible_v<E, const G&> &&
(std::is_same_v<bool, std::remove_cv_t<T>> || !detail::converts_from_any_cvref<T, expected<U, G>>) &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr expected<T, E>::expected(const expected<U, G>& rhs) : has_val_(rhs.has_value()) {
if (has_val_)
std::construct_at(std::addressof(val_), *rhs);
Expand All @@ -602,9 +602,9 @@ template <class U, class G>
requires(!std::is_reference_v<E> && std::is_constructible_v<T, U> && std::is_constructible_v<E, G> &&
(std::is_same_v<bool, std::remove_cv_t<T>> || !detail::converts_from_any_cvref<T, expected<U, G>>) &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr expected<T, E>::expected(expected<U, G>&& rhs) : has_val_(rhs.has_value()) {
if (has_val_)
std::construct_at(std::addressof(val_), *std::move(rhs));
Expand All @@ -625,7 +625,7 @@ constexpr expected<T, E>::expected(const expected<U, G>& rhs) : has_val_(rhs.has

template <class T, class E>
template <class U, class G>
requires(std::is_reference_v<E> && std::is_reference_v<G> && std::is_constructible_v<T, U &&> &&
requires(std::is_reference_v<E> && std::is_reference_v<G> && std::is_constructible_v<T, U&&> &&
std::is_convertible_v<G, E>)
constexpr expected<T, E>::expected(expected<U, G>&& rhs) : has_val_(rhs.has_value()) {
if (has_val_)
Expand Down Expand Up @@ -1456,17 +1456,17 @@ class expected<void, E> {
template <class U, class G>
requires(std::is_void_v<U> && !std::is_reference_v<E> && !std::is_same_v<G, E> &&
std::is_constructible_v<E, const G&> && !std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr explicit(!std::is_convertible_v<const G&, E>) expected(const expected<U, G>& rhs);

template <class U, class G>
requires(std::is_void_v<U> && !std::is_reference_v<E> && !std::is_same_v<G, E> &&
std::is_constructible_v<E, G> && !std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr explicit(!std::is_convertible_v<G, E>) expected(expected<U, G>&& rhs);

// Constructor from unexpected<G> const& / && — value-E path
Expand Down Expand Up @@ -1777,9 +1777,9 @@ template <class E>
template <class U, class G>
requires(std::is_void_v<U> && !std::is_reference_v<E> && !std::is_same_v<G, E> &&
std::is_constructible_v<E, const G&> && !std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr expected<void, E>::expected(const expected<U, G>& rhs) : has_val_(rhs.has_value()) {
if (!has_val_)
std::construct_at(std::addressof(unex_), rhs.error());
Expand All @@ -1789,9 +1789,9 @@ template <class E>
template <class U, class G>
requires(std::is_void_v<U> && !std::is_reference_v<E> && !std::is_same_v<G, E> && std::is_constructible_v<E, G> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G> &&> &&
!std::is_constructible_v<unexpected<E>, expected<U, G>&&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G>&> &&
!std::is_constructible_v<unexpected<E>, const expected<U, G> &&>)
!std::is_constructible_v<unexpected<E>, const expected<U, G>&&>)
constexpr expected<void, E>::expected(expected<U, G>&& rhs) : has_val_(rhs.has_value()) {
if (!has_val_)
std::construct_at(std::addressof(unex_), std::move(rhs).error());
Expand Down
6 changes: 3 additions & 3 deletions include/beman/expected/unexpected.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class unexpected<E&> {
// Binds E& directly to the referenced object; deleted below when G would bind to a temporary.
template <class G = E>
requires(!std::is_same_v<std::remove_cvref_t<G>, unexpected> &&
!std::is_same_v<std::remove_cvref_t<G>, std::in_place_t> && std::is_constructible_v<E&, G &&> &&
!std::is_same_v<std::remove_cvref_t<G>, std::in_place_t> && std::is_constructible_v<E&, G&&> &&
!detail::reference_constructs_from_temporary_v<E&, G>)
constexpr explicit unexpected(G&& e) noexcept : ptr_(std::addressof(static_cast<E&>(std::forward<G>(e)))) {}

Expand All @@ -149,7 +149,7 @@ class unexpected<E&> {
// Deleted catch-all: neither constructible nor a dangling case
template <class G>
requires(!std::is_same_v<std::remove_cvref_t<G>, unexpected> &&
!std::is_same_v<std::remove_cvref_t<G>, std::in_place_t> && !std::is_constructible_v<E&, G &&> &&
!std::is_same_v<std::remove_cvref_t<G>, std::in_place_t> && !std::is_constructible_v<E&, G&&> &&
!detail::reference_constructs_from_temporary_v<E&, G>)
constexpr unexpected(G&&) =
BEMAN_EXPECTED_DELETE_MSG("unexpected<E&>: no viable conversion from the given argument to E&");
Expand All @@ -159,7 +159,7 @@ class unexpected<E&> {
// reference or not. Naturally restricted to arity 1: there is no variadic overload here,
// and expected only ever calls this when is_constructible_v<E&, Args...> already holds.
template <class G = E>
requires(std::is_constructible_v<E&, G &&> && !detail::reference_constructs_from_temporary_v<E&, G>)
requires(std::is_constructible_v<E&, G&&> && !detail::reference_constructs_from_temporary_v<E&, G>)
constexpr explicit unexpected(std::in_place_t, G&& e) noexcept
: ptr_(std::addressof(static_cast<E&>(std::forward<G>(e)))) {}

Expand Down
Loading