| | |
| | |
| |
|
| | #pragma once |
| |
|
| | #include <iterator> |
| | #include <type_traits> |
| |
|
| | namespace Common { |
| |
|
| | |
| | template <typename T> |
| | concept IsContiguousContainer = std::contiguous_iterator<typename T::iterator>; |
| |
|
| | |
| | |
| | template <typename Derived, typename Base> |
| | concept DerivedFrom = requires { |
| | std::is_base_of_v<Base, Derived>; |
| | std::is_convertible_v<const volatile Derived*, const volatile Base*>; |
| | }; |
| |
|
| | |
| | template <typename From, typename To> |
| | concept ConvertibleTo = std::is_convertible_v<From, To>; |
| |
|
| | |
| |
|
| | template <typename T> |
| | concept IsArithmetic = std::is_arithmetic_v<T>; |
| |
|
| | template <typename T> |
| | concept IsIntegral = std::is_integral_v<T>; |
| |
|
| | } |
| |
|