Templa 0.0.1-alpha
C++ Metaprogramming Utilities
Loading...
Searching...
No Matches
templa::concepts::Container Concept Reference

Concept that models an STL-like container. More...

#include <concepts.hpp>

Concept definition

template<class T>
concept templa::concepts::Container = requires(T a, const T b) {
requires std::regular<T>;
requires std::swappable<T>;
requires std::same_as<typename T::reference, typename T::value_type &>;
requires std::same_as<typename T::const_reference, const typename T::value_type &>;
requires std::forward_iterator<typename T::iterator>;
requires std::forward_iterator<typename T::const_iterator>;
requires std::signed_integral<typename T::difference_type>;
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::iterator>::difference_type>;
requires std::same_as<typename T::difference_type, typename std::iterator_traits<typename T::const_iterator>::difference_type>;
{ a.begin() } -> std::same_as<typename T::iterator>;
{ a.end() } -> std::same_as<typename T::iterator>;
{ b.begin() } -> std::same_as<typename T::const_iterator>;
{ b.end() } -> std::same_as<typename T::const_iterator>;
{ a.cbegin() } -> std::same_as<typename T::const_iterator>;
{ a.cend() } -> std::same_as<typename T::const_iterator>;
{ a.size() } -> std::same_as<typename T::size_type>;
{ a.max_size() } -> std::same_as<typename T::size_type>;
{ a.empty() } -> std::convertible_to<bool>;
}
Concept that models an STL-like container.
Definition concepts.hpp:245
Concept to check if a container supports erasing of elements.
Definition concepts.hpp:230

Detailed Description

Concept that models an STL-like container.

Requires the type to satisfy several container properties including:

  • Regular, swappable
  • Supports erasing elements
  • Provides iterator, const_iterator with forward_iterator concept
  • Has difference_type and size_type types
  • Provides begin(), end(), cbegin(), cend(), size(), max_size(), empty()
Template Parameters
TContainer type to check.