|
|
|
Note: the standard doesn't define a named requirement with this name. This is a type category defined by the core language. It is included here as a named requirement only for consistency.
Contents |
The following types are collectively calledtrivially copyable types:
In general, for any trivially copyable typeT
and an objectobj1
ofT
, the underlying bytes ofobj1
can be copied into an array ofchar, orunsignedchar, orstd::byte(since C++17) or intoobj2
, a distinct object ofT
. Neitherobj1
norobj2
may be a potentially-overlapping subobject.
If the underlying bytes ofobj1
are copied into such an array, and then the resulting content is copied back intoobj1
,obj1
will hold its original value. If the underlying bytes ofobj1
are copied intoobj2
,obj2
will holdobj1
's value.
Underlying bytes can be copied bystd::memcpy orstd::memmove, as long as no living volatile object is accessed.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
CWG 1734 | C++11 | C++03 POD with deleted non-trivial assignment was not trivial | deleted ctors/operators allowed |
CWG 2094 | C++11 | Volatile scalar types are not trivially copyable (CWG 1746) | made trivially copyable |
(C++11) | checks if a type is trivially copyable (class template)[edit] |