emlabcpp
modern opinionated embedded C++ library
concepts.h File Reference
#include "./types/base.h"
#include <concepts>
#include <iterator>
#include <variant>
+ Include dependency graph for concepts.h:

Go to the source code of this file.

Namespaces

 emlabcpp
 MIT License.
 
 emlabcpp::detail
 

Variables

template<typename T >
concept emlabcpp::additive_operators
 
template<typename T >
concept emlabcpp::multiplicative_operators
 
template<typename T >
concept emlabcpp::arithmetic_operators = additive_operators< T > && multiplicative_operators< T >
 
template<typename T >
concept emlabcpp::arithmetic_assignment
 
template<typename T >
concept emlabcpp::arithmetic_like = arithmetic_operators< T > && arithmetic_assignment< T >
 
template<typename T >
concept emlabcpp::arithmetic = std::integral< T > || std::floating_point< T >
 
template<typename T >
concept emlabcpp::gettable_container
 
template<typename T >
concept emlabcpp::range_container
 so, std::ranges::range is meh because it expects return of begin() being input_output_iterator, which has to be def.constructible More...
 
template<typename T >
concept emlabcpp::data_container
 
template<typename T >
concept emlabcpp::container = range_container< T > || gettable_container< T > || data_container< T >
 
template<typename T >
concept emlabcpp::referenceable_container
 
template<typename T , typename ValueType >
concept emlabcpp::range_container_with
 
template<typename T , typename Iterator >
concept emlabcpp::range_container_with_iter
 
template<typename T , typename ValueType >
concept emlabcpp::data_container_with
 
template<typename T , typename DataIterator >
concept emlabcpp::data_container_with_iter
 
template<typename T >
concept emlabcpp::static_sized
 
template<typename UnaryCallable , typename Container >
concept emlabcpp::container_invocable
 
template<typename UnaryCallable , typename ReturnValue , typename... Args>
concept emlabcpp::invocable_returning
 
template<typename Stream , typename T >
concept emlabcpp::detail::directly_streamable_for = requires( Stream os, T val ) { os.operator<<( val ); }
 
template<typename T >
concept emlabcpp::ostreamlike
 
template<typename T >
concept emlabcpp::ostreamable
 
template<typename T , typename Variant >
concept emlabcpp::alternative_of
 Thanks for the solution goes to PJBoy@libera. More...
 
template<typename T , typename Tuple >
concept emlabcpp::element_of
 
template<typename T >
concept emlabcpp::with_value_type = requires { typename T::value_type; }
 
template<typename T , typename Signature >
concept emlabcpp::with_signature = std::same_as< typename signature_of< T >::signature, Signature >
 
template<typename T >
concept emlabcpp::with_push_back
 
template<typename T , typename U >
concept emlabcpp::some = std::same_as< std::remove_cv_t< T >, U >