|
gw
1.0.0
A bunch of small C++ utilities
|
Named type wrapper. More...
#include <named_type.hpp>
Public Types | |
| using | value_type = T |
| The type of the contained value. | |
| using | reference = value_type & |
| The type of the reference to the contained value. | |
| using | const_reference = const value_type & |
| The type of the const reference to the contained value. | |
| using | pointer = value_type * |
| The type of the pointer to the contained value. | |
| using | const_pointer = const value_type * |
| The type of the const pointer to the contained value. | |
Public Member Functions | |
|
template<typename... Args> requires std::constructible_from<value_type, Args...> | |
| constexpr | named_type (Args &&... args) noexcept(std::is_nothrow_constructible_v< value_type, Args... >) |
| Construct the gw::named_type object. | |
|
template<typename U , typename... Args> requires std::constructible_from<value_type, std::initializer_list<U>&, Args...> | |
| constexpr | named_type (std::initializer_list< U > ilist, Args &&... args) noexcept(std::is_nothrow_constructible_v< value_type, std::initializer_list< U > &, Args... >) |
| Construct the gw::named_type object. | |
| ~named_type () noexcept(std::is_nothrow_destructible_v< value_type >)=default | |
| Destroy the contained value. | |
| constexpr auto | operator-> () const noexcept -> const_pointer |
| Access the contained value. | |
| constexpr auto | operator-> () noexcept -> pointer |
| Access the contained value. | |
| constexpr auto | operator* () const &noexcept -> const_reference |
| Access the contained value. | |
| constexpr auto | operator* () &noexcept -> reference |
| Access the contained value. | |
| constexpr auto | operator* () const &&noexcept -> const value_type && |
| Access the contained value. | |
| constexpr auto | operator* () &&noexcept -> value_type && |
| Access the contained value. | |
| constexpr auto | value () const &noexcept -> const_reference |
| Return the contained value. | |
| constexpr auto | value () &noexcept -> reference |
| Return the contained value. | |
| constexpr auto | value () const &&noexcept -> const value_type && |
| Return the contained value. | |
| constexpr auto | value () &&noexcept -> value_type && |
| Return the contained value. | |
|
template<typename F > requires std::invocable<F, const_reference> | |
| constexpr auto | transform (F &&func) const &noexcept(noexcept(func(m_value))) -> named_type |
| Return a gw::named_type containing the transformed contained value. | |
|
template<typename F > requires std::invocable<F, reference> | |
| constexpr auto | transform (F &&func) &noexcept(noexcept(func(m_value))) -> named_type |
| Return a gw::named_type containing the transformed contained value. | |
|
template<typename F > requires std::invocable<F, const value_type&&> | |
| constexpr auto | transform (F &&func) const &&noexcept(noexcept(func(m_value))) -> named_type |
| Return a gw::named_type containing the transformed contained value. | |
|
template<typename F > requires std::invocable<F, value_type&&> | |
| constexpr auto | transform (F &&func) &&noexcept(noexcept(func(m_value))) -> named_type |
| Return a gw::named_type containing the transformed contained value. | |
| constexpr void | swap (named_type &rhs) noexcept(std::is_nothrow_swappable_v< value_type >) |
| Specialize the std::swap algorithm. | |
| constexpr void | reset () noexcept(std::is_nothrow_default_constructible_v< value_type >) |
| Destroy any contained value. | |
|
template<typename... Args> requires std::constructible_from<value_type, Args...> | |
| constexpr auto | emplace (Args &&... args) noexcept(std::is_nothrow_constructible_v< value_type, Args... >) -> reference |
| Construct the contained value in-place. | |
| constexpr auto | operator== (const named_type &rhs) const &noexcept(noexcept(m_value==rhs.m_value)) -> bool |
| Compare gw::named_type objects. | |
| constexpr auto | operator< (const named_type &rhs) const &noexcept(noexcept(m_value< rhs.m_value)) -> bool |
| Compare gw::named_type objects. | |
| constexpr auto | operator> (const named_type &rhs) const &noexcept(noexcept(m_value > rhs.m_value)) -> bool |
| Compare gw::named_type objects. | |
| constexpr | operator const_reference () const &noexcept |
| Convert the gw::named_type to its underlying type. | |
| constexpr | operator reference () &noexcept |
| Convert the gw::named_type to its underlying type. | |
| constexpr | operator const value_type && () const &&noexcept |
| Convert the gw::named_type to its underlying type. | |
| constexpr | operator value_type && () &&noexcept |
| Convert the gw::named_type to its underlying type. | |
| constexpr auto | operator++ () &noexcept(noexcept(++m_value)) -> named_type & |
| increments the contained value | |
| constexpr auto | operator++ () &&noexcept(noexcept(++m_value)) -> named_type && |
| increments the contained value | |
| constexpr auto | operator++ (int) &noexcept(noexcept(m_value++)) -> named_type |
| increments the contained value | |
| constexpr auto | operator++ (int) &&noexcept(noexcept(m_value++)) -> named_type |
| increments the contained value | |
| constexpr auto | operator-- () &noexcept(noexcept(--m_value)) -> named_type & |
| decrements the contained value | |
| constexpr auto | operator-- () &&noexcept(noexcept(--m_value)) -> named_type && |
| decrements the contained value | |
| constexpr auto | operator-- (int) &noexcept(noexcept(m_value--)) -> named_type |
| decrements the contained value | |
| constexpr auto | operator-- (int) &&noexcept(noexcept(m_value--)) -> named_type |
| decrements the contained value | |
| constexpr auto | operator+ () const &noexcept(noexcept(+m_value)) -> named_type |
| affirms the contained value | |
| constexpr auto | operator+ () &&noexcept(noexcept(+m_value)) -> named_type |
| affirms the contained value | |
| constexpr auto | operator- () const &noexcept(noexcept(-m_value)) -> named_type |
| negates the contained value | |
| constexpr auto | operator- () &&noexcept(noexcept(-m_value)) -> named_type |
| negates the contained value | |
| constexpr auto | operator+ (const named_type &rhs) const &noexcept(noexcept(m_value+rhs.m_value)) -> named_type |
| adds the contained values | |
| constexpr auto | operator+ (named_type &&rhs) const &noexcept(noexcept(m_value+rhs.m_value)) -> named_type |
| adds the contained values | |
| constexpr auto | operator+ (const named_type &rhs) &&noexcept(noexcept(m_value+rhs.m_value)) -> named_type |
| adds the contained values | |
| constexpr auto | operator+ (named_type &&rhs) &&noexcept(noexcept(m_value+rhs.m_value)) -> named_type |
| adds the contained values | |
| constexpr auto | operator- (const named_type &rhs) const &noexcept(noexcept(m_value - rhs.m_value)) -> named_type |
| subtracts the contained values | |
| constexpr auto | operator- (named_type &&rhs) const &noexcept(noexcept(m_value - rhs.m_value)) -> named_type |
| subtracts the contained values | |
| constexpr auto | operator- (const named_type &rhs) &&noexcept(noexcept(m_value - rhs.m_value)) -> named_type |
| subtracts the contained values | |
| constexpr auto | operator- (named_type &&rhs) &&noexcept(noexcept(m_value - rhs.m_value)) -> named_type |
| subtracts the contained values | |
| constexpr auto | operator* (const named_type &rhs) const &noexcept(noexcept(m_value *rhs.m_value)) -> named_type |
| multiplies the contained values | |
| constexpr auto | operator* (named_type &&rhs) const &noexcept(noexcept(m_value *rhs.m_value)) -> named_type |
| multiplies the contained values | |
| constexpr auto | operator* (const named_type &rhs) &&noexcept(noexcept(m_value *rhs.m_value)) -> named_type |
| multiplies the contained values | |
| constexpr auto | operator* (named_type &&rhs) &&noexcept(noexcept(m_value *rhs.m_value)) -> named_type |
| multiplies the contained values | |
| constexpr auto | operator/ (const named_type &rhs) const &noexcept(noexcept(m_value/rhs.m_value)) -> named_type |
| devides the contained values | |
| constexpr auto | operator/ (named_type &&rhs) const &noexcept(noexcept(m_value/rhs.m_value)) -> named_type |
| devides the contained values | |
| constexpr auto | operator/ (const named_type &rhs) &&noexcept(noexcept(m_value/rhs.m_value)) -> named_type |
| devides the contained values | |
| constexpr auto | operator/ (named_type &&rhs) &&noexcept(noexcept(m_value/rhs.m_value)) -> named_type |
| devides the contained values | |
| constexpr auto | operator% (const named_type &rhs) const &noexcept(noexcept(m_value % rhs.m_value)) -> named_type |
| calculates the remainder of the contained values | |
| constexpr auto | operator% (named_type &&rhs) const &noexcept(noexcept(m_value % rhs.m_value)) -> named_type |
| calculates the remainder of the contained values | |
| constexpr auto | operator% (const named_type &rhs) &&noexcept(noexcept(m_value % rhs.m_value)) -> named_type |
| calculates the remainder of the contained values | |
| constexpr auto | operator% (named_type &&rhs) &&noexcept(noexcept(m_value % rhs.m_value)) -> named_type |
| calculates the remainder of the contained values | |
| constexpr auto | operator~ () const &noexcept(noexcept(~m_value)) -> named_type |
| inverts the contained value | |
| constexpr auto | operator& (const named_type &rhs) const &noexcept(noexcept(m_value &rhs.m_value)) -> named_type |
| performs binary AND on the contained values | |
| constexpr auto | operator& (named_type &&rhs) const &noexcept(noexcept(m_value &rhs.m_value)) -> named_type |
| performs binary AND on the contained values | |
| constexpr auto | operator& (const named_type &rhs) &&noexcept(noexcept(m_value &rhs.m_value)) -> named_type |
| performs binary AND on the contained values | |
| constexpr auto | operator& (named_type &&rhs) &&noexcept(noexcept(m_value &rhs.m_value)) -> named_type |
| performs binary AND on the contained values | |
| constexpr auto | operator| (const named_type &rhs) const &noexcept(noexcept(m_value|rhs.m_value)) -> named_type |
| performs binary OR on the contained values | |
| constexpr auto | operator| (named_type &&rhs) const &noexcept(noexcept(m_value|rhs.m_value)) -> named_type |
| performs binary OR on the contained values | |
| constexpr auto | operator| (const named_type &rhs) &&noexcept(noexcept(m_value|rhs.m_value)) -> named_type |
| performs binary OR on the contained values | |
| constexpr auto | operator| (named_type &&rhs) &&noexcept(noexcept(m_value|rhs.m_value)) -> named_type |
| performs binary OR on the contained values | |
| constexpr auto | operator^ (const named_type &rhs) const &noexcept(noexcept(m_value ^ rhs.m_value)) -> named_type |
| performs binary XOR on the contained values | |
| constexpr auto | operator^ (named_type &&rhs) const &noexcept(noexcept(m_value ^ rhs.m_value)) -> named_type |
| performs binary XOR on the contained values | |
| constexpr auto | operator^ (const named_type &rhs) &&noexcept(noexcept(m_value ^ rhs.m_value)) -> named_type |
| performs binary XOR on the contained values | |
| constexpr auto | operator^ (named_type &&rhs) &&noexcept(noexcept(m_value ^ rhs.m_value)) -> named_type |
| performs binary XOR on the contained values | |
| constexpr auto | operator<< (const named_type &rhs) const &noexcept(noexcept(m_value<< rhs.m_value)) -> named_type |
| performs binary left shift on the contained values | |
| constexpr auto | operator<< (named_type &&rhs) const &noexcept(noexcept(m_value<< rhs.m_value)) -> named_type |
| performs binary left shift on the contained values | |
| constexpr auto | operator<< (const named_type &rhs) &&noexcept(noexcept(m_value<< rhs.m_value)) -> named_type |
| performs binary left shift on the contained values | |
| constexpr auto | operator<< (named_type &&rhs) &&noexcept(noexcept(m_value<< rhs.m_value)) -> named_type |
| performs binary left shift on the contained values | |
| constexpr auto | operator>> (const named_type &rhs) const &noexcept(noexcept(m_value > > rhs.m_value)) -> named_type |
| performs binary right shift on the contained values | |
| constexpr auto | operator>> (named_type &&rhs) const &noexcept(noexcept(m_value > > rhs.m_value)) -> named_type |
| performs binary right shift on the contained values | |
| constexpr auto | operator>> (const named_type &rhs) &&noexcept(noexcept(m_value > > rhs.m_value)) -> named_type |
| performs binary right shift on the contained values | |
| constexpr auto | operator>> (named_type &&rhs) &&noexcept(noexcept(m_value > > rhs.m_value)) -> named_type |
| performs binary right shift on the contained values | |
| constexpr auto | begin () const noexcept(noexcept(std::ranges::begin(m_value))) |
| returns an iterator to the beginning of the contained value | |
| constexpr auto | begin () noexcept(noexcept(std::ranges::begin(m_value))) |
| returns an iterator to the beginning of the contained value | |
| constexpr auto | end () const noexcept(noexcept(std::ranges::end(m_value))) |
| returns an iterator to the end of the contained value | |
| constexpr auto | end () noexcept(noexcept(std::ranges::end(m_value))) |
| returns an iterator to the end of the contained value | |
Static Public Member Functions | |
| static constexpr auto | name () noexcept |
| Return the name of the gw::named_type. | |
Friends | |
| auto | operator<< (std::ostream &ostream, const named_type &rhs) noexcept(noexcept(ostream<< rhs.m_value)) -> std::ostream & |
| inserts formatted data | |
| auto | operator>> (std::istream &istream, named_type &rhs) noexcept(noexcept(istream > > rhs.m_value)) -> std::istream & |
| extracts formatted data | |
Named type wrapper.
The class template gw::named_type is a simple wrapper around a value of some type T. It is intended to be used to create a new type that is distinct from T, but which has the same representation and semantics as T. This is useful to distinguish between values that are conceptually different, but which have the same underlying type. For example, a std::string can be used to represent a person's name, but it can also be used to represent a person's address. Using gw::named_type to create a name_t and an address_t allows the compiler to catch errors where a name_t is used where an address_t is expected, and vice versa.