[Bug libstdc++/112591] variant allows for creating multiple empty objects at same address
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 8 12:23:14 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112591
--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tomasz Kaminski <tkaminsk@gcc.gnu.org>:
https://gcc.gnu.org/g:09bece00d0ec981d1b0b47ba93a67a745de3f062
commit r16-5961-g09bece00d0ec981d1b0b47ba93a67a745de3f062
Author: Tomasz KamiÅski <tkaminsk@redhat.com>
Date: Mon Dec 8 08:49:45 2025 +0100
libstdc++: Refactor _Variadic_union so _Unitialized<T, false> is not needed
[PR112591].
The changes the _Variadic_union implementation, in a way that the
_Unitialized<T, false> partial specialization for non-trivial types is not
necessary.
This is simply done by separating the specialization for
__trivially_destructible
being true and false, and for the later defining an empty destructor
(similarly
as it was done using concepts).
We also reduce the number of specialization of _Variadic_union, so
specialization
(int, int) is reused by (string, int, int) and (int, int). This is done by
initialization __trivially_destructible with conjunction of
is_trivially_destructible_v for remaining components. This is only
necessary
for non-trivial (false) specialization, as if both _First and _Rest... are
trivially destructible, then _Rest must also be.
The above change does not regress the fix r14-7259-g2d55d94e5df389 for
template depth, and both before and after the change template depth is 266.
I have added dg-options to the 87619.cc to catch future regressions.
This also add test for PR112591.
PR libstdc++/112591
libstdc++-v3/ChangeLog:
* include/std/variant (_Variadic_union): Separate specializations
for
for union of only trivially destructible types (true as first
template
argument). Unconditionally define destructor for
_Variadic_union<false,
_First, _Rest...>.
* testsuite/20_util/variant/87619.cc: Add limit for the template
depth.
* testsuite/20_util/variant/112591.cc: New test.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz KamiÅski <tkaminsk@redhat.com>
More information about the Gcc-bugs
mailing list