Difference between revisions of "cpp/named req/CopyConstructible"
From cppreference.com
Andreas Krug (Talk | contribs) m (.) |
(Add link to standard) |
||
Line 37: | Line 37: | ||
Since C++11, the standard library uses {{lc|std::addressof}} whenever the address of an object is needed. | Since C++11, the standard library uses {{lc|std::addressof}} whenever the address of an object is needed. | ||
+ | |||
+ | ===References=== | ||
+ | {{cot}} | ||
+ | {{ref std c++23}} | ||
+ | {{ref std|section=16.4.4.2|title=Template argument requirements|id=utility.arg.requirements}} | ||
+ | {{ref std end}} | ||
+ | {{cob}} | ||
===See also=== | ===See also=== |
Revision as of 20:19, 3 March 2024
Specifies that an instance of the type can be copy-constructed from an lvalue expression.
Contents |
Requirements
The type T
satisfies CopyConstructible if
- The type
T
satisfies MoveConstructible, and
Given
- v, an lvalue expression of type
T
or const T or an rvalue expression of type const T, - u, an arbitrary identifier.
The following expressions must be valid and have their specified effects:
Expression | Post-conditions |
---|---|
T u = v; | The value of u is equivalent to the value of v.
The value of v is unchanged. |
T(v) | The value of T(v) is equivalent to the value of v.
The value of v is unchanged. |
The expression v.~T() also must be valid, and, for lvalue v, the expression &v must have the type |
(until C++11) |
Notes
Until C++11, classes that overloaded operator& were not CopyConstructible and thus were not usable in the standard library containers. This is a design decision in C++98 (instead of a defect, see LWG issue 390).
Since C++11, the standard library uses std::addressof whenever the address of an object is needed.
References
Extended content |
---|
|
See also
(C++11)(C++11)(C++11) |
checks if a type has a copy constructor (class template) |
(C++20) |
specifies that an object of a type can be copy constructed and move constructed (concept) |