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.
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.