libbmb
Modern implementation of STL
Loading...
Searching...
No Matches
concepts.h
Go to the documentation of this file.
1#pragma once
7#include "utils/type_traits.h"
8
9namespace bmb {
10
11namespace detail {
12
13template <typename T, typename U>
15
16} // namespace detail
17
18// SameHelper is needed for correct subsuming.
19// This is required for all commutative relations.
20
22template <typename T, typename U>
24
26template <typename T>
27concept DefaultConstructible = requires { T(); };
28
30template <typename T, typename... Args>
31concept ConstructibleFrom = requires { T(declval<Args>()...); };
32
34template <typename T, typename... Args>
35concept NothrowConstructibleFrom = requires {
36 // There is no subsuming with ConstructibleFrom
37 { T(declval<Args>()...) } noexcept;
38};
39
41template <typename T>
43
45template <typename T>
47
49template <typename T>
50concept MoveAssignable = requires(T a) { a = declval<T &&>(); };
51
53template <typename T>
54concept NothrowMoveAssignable = requires(T a) {
55 { a = declval<T &&>() } noexcept;
56};
57
59template <typename T>
61
63template <typename T>
65
67template <typename T>
68concept CopyAssignable = requires(T a, T b) { a = b; };
69
71template <typename T>
72concept NothrowCopyAssignable = requires(T a, T b) {
73 { a = b } noexcept;
74};
75
77template <typename From, typename To>
78concept ConvertibleTo = requires(From from) { static_cast<To>(from); };
79
81template <typename F, typename... Args>
83
85template <typename F, typename... Args>
86concept Predicate
87 = Invocable<F, Args...> && ConvertibleTo<invoke_result_t<F, Args...>, bool>;
88
89} // namespace bmb
ConstructibleFrom.
Definition concepts.h:31
ConvertibleTo.
Definition concepts.h:78
CopyAssignable.
Definition concepts.h:68
CopyConstructible.
Definition concepts.h:60
DefaultConstructible.
Definition concepts.h:27
Invocable.
Definition concepts.h:82
MoveAssignable.
Definition concepts.h:50
MoveConstructible.
Definition concepts.h:42
NothrowConstructibleFrom.
Definition concepts.h:35
NothrowCopyAssignable.
Definition concepts.h:72
NothrowCopyConstructible.
Definition concepts.h:64
NothrowMoveAssignable.
Definition concepts.h:54
NothrowMoveConstructible.
Definition concepts.h:46
Predicate.
Definition concepts.h:87
SameAs.
Definition concepts.h:23
Definition concepts.h:14
Definition algo_base.h:14
invoke_result< F, Args... >::type invoke_result_t
invoke_result_t
Definition type_traits.h:298
constexpr bool is_invocable_v
is_invocable_v
Definition type_traits.h:290
constexpr T && forward(remove_ref_t< T > &value) noexcept
Forward a lvalue.
Definition move.h:33