Strong typedef for a type T.
Typical usage:
Or:
Has all the:
If used with container-like type also has common STL functions:
Operators: You can customize the operators that are available by passing the third argument of type StrongTypedefOps. See its docs for more info.
Definition at line 163 of file strong_typedef.hpp.
Inheritance diagram for utils::StrongTypedef< Tag, T, Ops, class >:
Collaboration diagram for utils::StrongTypedef< Tag, T, Ops, class >:Public Types | |
| using | UnderlyingType = T |
| using | TagType = Tag |
Public Member Functions | |
| StrongTypedef (const StrongTypedef &)=default | |
| StrongTypedef (StrongTypedef &&) noexcept=default | |
| StrongTypedef & | operator= (const StrongTypedef &)=default |
| StrongTypedef & | operator= (StrongTypedef &&) noexcept=default |
| constexpr | StrongTypedef (impl::strong_typedef::InitializerList< T > lst) |
| template<typename... Args, typename = std::enable_if_t<std::is_constructible_v<T, Args...>>> | |
| constexpr | StrongTypedef (Args &&... args) noexcept(noexcept(T(std::forward< Args >(args)...))) |
| constexpr | operator const T & () const &noexcept |
| constexpr | operator T () &&noexcept |
| constexpr | operator T& () &noexcept |
| constexpr const T & | GetUnderlying () const &noexcept |
| constexpr T | GetUnderlying () &&noexcept |
| constexpr T & | GetUnderlying () &noexcept |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>> | |
| auto | begin () |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>> | |
| auto | end () |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>> | |
| auto | begin () const |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>> | |
| auto | end () const |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>> | |
| auto | cbegin () const |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>> | |
| auto | cend () const |
| template<typename Void = void, typename = impl::strong_typedef::EnableIfSizeable<const T, Void>> | |
| auto | size () const |
| auto | empty () const |
| auto | clear () |
| template<class Arg > | |
| decltype(auto) | operator[] (Arg &&i) |
| template<class Arg > | |
| decltype(auto) | operator[] (Arg &&i) const |
Static Public Attributes | |
| static constexpr StrongTypedefOps | kOps = Ops |
| using utils::StrongTypedef< Tag, T, Ops, class >::TagType = Tag |
Definition at line 172 of file strong_typedef.hpp.
| using utils::StrongTypedef< Tag, T, Ops, class >::UnderlyingType = T |
Definition at line 171 of file strong_typedef.hpp.
|
inlineconstexpr |
Definition at line 181 of file strong_typedef.hpp.
|
inlineexplicitconstexprnoexcept |
Definition at line 186 of file strong_typedef.hpp.
|
inline |
Definition at line 205 of file strong_typedef.hpp.
|
inline |
Definition at line 217 of file strong_typedef.hpp.
|
inline |
Definition at line 229 of file strong_typedef.hpp.
|
inline |
Definition at line 235 of file strong_typedef.hpp.
|
inline |
Definition at line 247 of file strong_typedef.hpp.
|
inline |
Definition at line 245 of file strong_typedef.hpp.
|
inline |
Definition at line 211 of file strong_typedef.hpp.
|
inline |
Definition at line 223 of file strong_typedef.hpp.
|
inlineconstexprnoexcept |
Definition at line 200 of file strong_typedef.hpp.
|
inlineconstexprnoexcept |
Definition at line 201 of file strong_typedef.hpp.
|
inlineconstexprnoexcept |
Definition at line 199 of file strong_typedef.hpp.
|
inlineexplicitconstexprnoexcept |
Definition at line 195 of file strong_typedef.hpp.
|
inlineexplicitconstexprnoexcept |
Definition at line 196 of file strong_typedef.hpp.
|
inlineexplicitconstexprnoexcept |
Definition at line 197 of file strong_typedef.hpp.
|
inline |
Definition at line 250 of file strong_typedef.hpp.
|
inline |
Definition at line 254 of file strong_typedef.hpp.
|
inline |
Definition at line 241 of file strong_typedef.hpp.
|
staticconstexpr |
Definition at line 173 of file strong_typedef.hpp.