is_move_bitcopying<T>
A customisable integral constant type true for T
types which are move bitcopying
safe. As per P1029 move bitcopying, these are types for
which:
- There is an inline, constexpr-available, default constructor.
- The move constructor has side effects equivalent to
memcpy
of source to destination, followed by amemcpy
of a default constructed instance to source. - That the destruction of a default constructed instance has no visible side effects.
This implies that if you move from a bit copying type, you need not call its destructor, even if that is a virtual destructor.
If you opt your types into this trait, Outcome will track moved-from state and not call the destructor for your type on moved-from instances. Obviously enough this is, in current C++ standards, undefined behaviour. However it very significantly improves the quality of codegen during inlining.
Overridable: By template specialisation into the trait
namespace.
Default: False. Default specialisations exist for:
<outcome/experimental/status_result.hpp>
- True for
SYSTEM_ERROR2_NAMESPACE::status_code<DomainType>
if traitSYSTEM_ERROR2_NAMESPACE::traits::is_move_bitcopying<SYSTEM_ERROR2_NAMESPACE::status_code<DomainType>>::value
is true. - True for
SYSTEM_ERROR2_NAMESPACE::errored_status_code<DomainType>
if traitSYSTEM_ERROR2_NAMESPACE::traits::is_move_bitcopying<SYSTEM_ERROR2_NAMESPACE::errored_status_code<DomainType>>::value
is true.
- True for
Namespace: OUTCOME_V2_NAMESPACE::trait
Header: <outcome/trait.hpp>