sandbox
Loading...
Searching...
No Matches
concepts.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_CORE_CONCEPTS_HPP_
3#define LIBSBX_CORE_CONCEPTS_HPP_
4
5#include <type_traits>
6#include <concepts>
7
8namespace sbx::core {
9
17template<typename Callable, typename Return, typename... Args>
18concept callable = std::is_invocable_r_v<Return, Callable, Args...>;
19
20template<typename Iterable>
21concept iterable = requires(Iterable iterable) {
22 { Iterable::iterator };
23 { iterable.begin() } -> std::same_as<typename Iterable::iterator>;
24 { iterable.end() } -> std::same_as<typename Iterable::iterator>;
25}; // concept iterable
26
27template<typename Iterable>
28concept const_iterable = requires(Iterable iterable) {
29 { Iterable::const_iterator };
30 { iterable.cbegin() } -> std::same_as<typename Iterable::const_iterator>;
31 { iterable.cend() } -> std::same_as<typename Iterable::const_iterator>;
32}; // concept const_iterable
33
34template<typename Iterable>
35concept reverse_iterable = requires(Iterable iterable) {
36 { Iterable::reverse_iterator };
37 { iterable.rbegin() } -> std::same_as<typename Iterable::reverse_iterator>;
38 { iterable.rend() } -> std::same_as<typename Iterable::reverse_iterator>;
39}; // concept reverse_iterable
40
41} // namespace sbx::core
42
43#endif // LIBSBX_CORE_CONCEPTS_HPP_
Describes a type or object that can be invoked with the give parameters and return the given type.
Definition: concepts.hpp:18