Concepts

For all the standard concepts that are involved in the definition of std::regular we provide supplementary concepts that check whether all the required operations are trivial or nothrow. There are standard type traits for all these requirements, but they weren’t grouped into concepts.

These concepts are especially useful in unit tests.

Reference

Core language concepts

For std::convertible_to:

#include <actl/meta/concepts/core/ConvertibleTo.hpp>
template<typename Source, typename Target>
concept NothrowExplicitlyConvertibleTo
template<typename Source, typename Target>
concept NothrowConvertibleTo
template<typename Source, typename Target>
concept MayThrowConvertibleTo

For std::assignable_from:

#include <actl/meta/concepts/core/AssignableFrom.hpp>
template<typename Target, typename Source>
concept TriviallyAssignableFrom
template<typename Target, typename Source>
concept NothrowAssignableFrom

For std::swappable, std::swappable_with:

#include <actl/meta/concepts/core/Swappable.hpp>
template<typename T>
concept NothrowSwappable
template<typename L, typename R>
concept NothrowSwappableWith

For std::constructible_from:

#include <actl/meta/concepts/core/ConstructibleFrom.hpp>
template<typename T, typename ...Args>
concept TriviallyConstructibleFrom
template<typename T, typename ...Args>
concept NothrowConstructibleFrom

For std::default_initializable:

#include <actl/meta/concepts/core/DefaultInitializable.hpp>
template<typename T>
concept TriviallyDefaultInitializable
template<typename T>
concept NothrowDefaultInitializable

For std::move_constructible:

#include <actl/meta/concepts/core/MoveConstructible.hpp>
template<typename T>
concept TriviallyMoveConstructible
template<typename T>
concept NothrowMoveConstructible

For std::copy_constructible:

#include <actl/meta/concepts/core/CopyConstructible.hpp>
template<typename T>
concept TriviallyCopyConstructible
template<typename T>
concept NothrowCopyConstructible
template<typename T>
concept MayThrowCopyConstructible

Comparison concepts

For std::equality_comparable:

#include <actl/meta/concepts/comparison/EqualityComparable.hpp>
template<typename T>
concept NothrowEqualityComparable

Object concepts

For std::movable:

#include <actl/meta/concepts/object/Movable.hpp>
template<typename T>
concept TriviallyMovable
template<typename T>
concept NothrowMovable

For std::copyable:

#include <actl/meta/concepts/object/Copyable.hpp>
template<typename T>
concept TriviallyCopyable
template<typename T>
concept NothrowCopyable
template<typename T>
concept MayThrowCopyable

For std::semiregular:

#include <actl/meta/concepts/object/SemiRegular.hpp>
template<typename T>
concept TriviallySemiRegular
template<typename T>
concept NothrowSemiRegular

For std::regular:

#include <actl/meta/concepts/object/Regular.hpp>
template<typename T>
concept NothrowRegular