A customisable integral constant type true for T types which are move bitcopying safe. As per P1029 move bitcopying, these are types for which:

  1. There is an inline, constexpr-available, default constructor.
  2. The move constructor has side effects equivalent to memcpy of source to destination, followed by a memcpy of a default constructed instance to source.
  3. 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:

Namespace: OUTCOME_V2_NAMESPACE::trait

Header: <outcome/trait.hpp>