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.
[edit] RequirementsThe following types are collectively called trivially copyable types:
In general, for any trivially copyable type T
and an object obj1
of T
, the underlying bytes of obj1
can be copied into an array of char, or unsigned char, or std::byte(since C++17) or into obj2
, a distinct object of T
. Neither obj1
nor obj2
may be a potentially-overlapping subobject.
If the underlying bytes of obj1
are copied into such an array, and then the resulting content is copied back into obj1
, obj1
will hold its original value. If the underlying bytes of obj1
are copied into obj2
, obj2
will hold obj1
's value.
Underlying bytes can be copied by std::memcpy or std::memmove, as long as no living volatile object is accessed.
[edit] Defect reportsThe 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 [edit] See alsoRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4