[cfe-dev] std::pair not trivially copyable?
Nevin Liber via cfe-dev
cfe-dev at lists.llvm.org
Wed Aug 26 10:17:55 PDT 2020
On Tue, Aug 25, 2020 at 4:37 PM David Blaikie via cfe-dev <
cfe-dev at lists.llvm.org> wrote:
>
> From what I can tell, reading this (
> https://stackoverflow.com/questions/58283694/why-is-pair-of-const-trivially-copyable-but-pair-is-not )
> and the C++17 spec, it just doesn't specify the copy and move assignment
> operators as defaulted, or say anything about their triviality, so they
> aren't trivial even for trivial types. Perhaps an oversight when thinking
> about the other complexities of when they shuold be deleted.
>
In general, move/copy assignment cannot be defaulted for pair, because
assignment of reference types has meaning:
int i = 2;
int j = 3;
std::pair<int&, int> p1(i, 5);
std::pair<int&, int> p2(j, 7);
p2 = p1; // j now has the value 2
struct A
{
A(int& r_, int i_) : r(r_), i(i_) {}
int& r;
int i;
};
int i = 2;
int j = 3;
A a1(i, 5);
A a2(j, 7);
a2 = a1; // Compile time error - deleted copy assignment operator
Now, this doesn't that pair couldn't have trivial copy/move assignment
operators when it holds trivially copy/move assignable types, but I don't
know how much of an ABI break this would be.
--
Nevin ":-)" Liber <mailto:nevin at cplusplusguy.com <nevin at eviloverlord.com>>
+1-847-691-1404
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200826/8d99a9ac/attachment.html>
More information about the cfe-dev
mailing list