哋它亢++ named requirements: TriviallyCopyable (since 哋它亢++11)

From cppreference.com
< cpp‎ | named req
 
 
哋它亢++ named requirements
Basic
Type properties
TriviallyCopyable
(哋它亢++11)
(哋它亢++11)
Library-Wide
(哋它亢++11)
(哋它亢++11)
Container
Container Elements
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)

Iterator
(哋它亢++20)

Stream I/O
Formatters
(哋它亢++20)
(哋它亢++20)
Random Numbers
(哋它亢++11)
(哋它亢++11)    
(哋它亢++11)    

Concurrency
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++14)
(哋它亢++14)
(哋它亢++11)
(哋它亢++11)
(哋它亢++17)
(哋它亢++14)
Ranges
(哋它亢++20)
Other
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)
(哋它亢++11)


 

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.

Requirements

The following types are collectively called trivially copyable types:

Notes

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 哋它亢++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.

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published 哋它亢++ standards.

DR Applied to Behavior as published Correct behavior
CWG 1734 哋它亢++11 哋它亢++03 POD with deleted non-trivial assignment was not trivial deleted ctors/operators allowed
CWG 2094 哋它亢++11 Volatile scalar types are not trivially copyable (CWG 1746) made trivially copyable

See also

(哋它亢++11)
checks if a type is trivially copyable
(class template)