36 consteval explicit null() =
default;
45 consteval explicit operator bool()
const;
68 template<
typename...
ARGS>
76 template<
typename TYPE>
84 template<
typename TYPE>
85 concept EnumClassType = std::is_enum_v<TYPE> && !std::is_convertible_v<TYPE, std::underlying_type_t<TYPE>>;
97 { a == b } -> std::convertible_to<bool>;
98 { a != b } -> std::convertible_to<bool>;
107 template <
typename T>
109 { a < b } -> std::convertible_to<bool>;
110 { a <= b } -> std::convertible_to<bool>;
111 { a > b } -> std::convertible_to<bool>;
112 { a >= b } -> std::convertible_to<bool>;
121 template <
typename T>
130 template <
typename T>
139 template <
typename T>
141 { a <=> b } -> std::convertible_to<std::partial_ordering>;
150 template <
typename T>
152 { a <=> b } -> std::convertible_to<std::strong_ordering>;
156 template <
typename T>
189 template <
typename T>
191 { a.compareTo(b) } -> std::same_as<integer>;
208 template <
typename TYPE>
209 concept Printable =
requires(std::ostream& os,
const TYPE& t) {
210 { os << t } -> std::same_as<std::ostream&>;
219 template <
typename TYPE>
221 { is >> t } -> std::same_as<std::istream&>;
229 template <
typename TYPE>
251 template <
typename T>
253 requires(
const T& obj) {
254 { std::hash<T>{}(obj) } -> std::convertible_to<std::size_t>;
263 template <
typename T>
265 requires(
const T& a,
const T& b) {
266 { a == b } -> std::convertible_to<bool>;
268 requires(
const T&
a,
const T&
b) {
269 {
a.
equals(
b) } -> std::convertible_to<bool>;
310 template <
typename T>
312 requires(
const T& t) {
313 { t.toHash() } -> std::same_as<u_integer>;
324 template <
typename F,
typename...
Args>
325 concept Callable =
requires(F&& f, Args&&... args) {
326 std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
344 template <
typename Callback,
typename ReturnType,
typename...
Args>
345 concept CallbackOf =
requires(Callback callback, Args&&... args) {
346 { callback(std::forward<Args>(args)...) } -> std::convertible_to<ReturnType>;
376 template <
typename Callback,
typename TYPE>
397 template <
typename Callback,
typename TYPE>
418 template <
typename Callback,
typename TYPE>
429 template <
typename Callback,
typename Input,
typename Output>
451 template <
typename Base,
typename Derive>
452 concept SuperOf = std::is_base_of_v<Base, Derive> || std::is_same_v<Base, Derive>;
471 template <
typename Base,
typename Derive>
472 concept ExtendsOf = std::derived_from<Derive, Base> || std::is_same_v<Base, Derive>;
480 template <
typename From,
typename To>
489 template <
typename T,
typename U>
500 template <
typename C>
502 { c.begin() } -> std::input_or_output_iterator;
503 { c.end() } -> std::input_or_output_iterator;
504 { c.size() } -> std::convertible_to<std::size_t>;
513 template <
typename C>
519 template<
bool MATCH,
typename MATCH_TYPE,
typename OTHER_TYPE>
522 template<
typename MATCH_TYPE,
typename OTHER_TYPE>
529 template<
typename MATCH_TYPE,
typename OTHER_TYPE>
536 template<
bool MATCH,
typename MATCH_TYPE,
typename OTHER_TYPE>
549 static constexpr u_integer SIZE =
sizeof...(INTS);
565 class indexSequenceImpl;
568 class indexSequenceImpl<0,
INTS...> {
574 class indexSequenceImpl :
public indexSequenceImpl<NUM - 1, NUM - 1, INTS...> {
576 using type = indexSequenceImpl<
NUM - 1,
NUM - 1,
INTS...>::type;
579 template <u_
integer NUM>
633 template <
typename R,
typename...
Args>
640 template <
typename C>
645 using ReturnType = CallType::ReturnType;
646 using Signature = CallType::Signature;
650 template <
typename C,
typename R,
typename...
Args>
657 template <
typename C,
typename R,
typename...
Args>
665consteval original::null::operator
bool()
const {
678template<original::u_
integer NUM>
680 using sequence = makeIndexSequence::indexSequenceImpl<NUM>::type;
bool equals(const autoPtr &other) const noexcept override
Equality comparison.
Definition autoPtr.h:740
Compile-time sequence of unsigned integers.
Definition types.h:548
static consteval u_integer size() noexcept
Gets the size of the sequence.
Definition types.h:674
Utility for generating index sequences.
Definition types.h:563
friend consteval auto makeSequence() noexcept
Creates an index sequence of given length.
A placeholder type representing the absence of a value.
Definition types.h:33
consteval bool operator!() const
Logical NOT operator.
Definition types.h:669
constexpr ~null()=default
Default destructor (constexpr)
consteval null()=default
Default constructor (consteval)
Unique ownership smart pointer with move semantics.
Definition ownerPtr.h:37
Basic concept for any callable type.
Definition types.h:325
Validates callback signature compatibility.
Definition types.h:345
Requires type to implement the comparable interface with compareTo method.
Definition types.h:190
Combines Comparable and CallbackOf for comparison callbacks.
Definition types.h:377
Constraint for predicate callbacks.
Definition types.h:398
Basic container concept.
Definition types.h:501
Checks if type is convertible to another type.
Definition types.h:481
Requires type to be a scoped enumeration.
Definition types.h:85
Requires type to be an enumeration.
Definition types.h:77
Requires type to support equality comparison operators.
Definition types.h:96
Requires type to support equality comparison for hashing.
Definition types.h:264
Checks derivation or type identity using std::derived_from.
Definition types.h:472
Requires type to implement the hashable interface with toHash method.
Definition types.h:311
Concept checking for types that can be hashed.
Definition types.h:252
Ensures the parameter pack is not empty.
Definition types.h:69
Constraint for mutating operations.
Definition types.h:419
Requires type to support either equality or relational comparisons.
Definition types.h:122
Constraint for boolean predicate callbacks.
Definition types.h:357
Requires type to support output stream insertion.
Definition types.h:209
Checks if two types are exactly the same.
Definition types.h:490
Sequence container concept.
Definition types.h:514
Requires type to support both input and output stream operations.
Definition types.h:230
Requires type to support strong ordering via three-way comparison.
Definition types.h:151
Checks inheritance or type equality.
Definition types.h:452
Requires type to support three-way comparison (spaceship operator).
Definition types.h:140
Requires type to support all comparison operators.
Definition types.h:131
Requires type to support relational comparison operators.
Definition types.h:108
Platform-independent type definitions and compiler/platform detection.
Main namespace for the project Original.
Definition algorithms.h:21
consteval auto makeSequence() noexcept
Creates an index sequence of given length.
Definition types.h:679
consteval auto reverseIndexSequenceImpl(indexSequence< Indices... > seq)
Implementation detail for reversing an index sequence.
Definition types.h:685
Primary template for general callable types.
Definition types.h:641