https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108822
--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>: https://gcc.gnu.org/g:1e88a151f878e0a139bf55eb0cee2506fb903274 commit r14-7256-g1e88a151f878e0a139bf55eb0cee2506fb903274 Author: Jonathan Wakely <jwak...@redhat.com> Date: Mon Jan 15 16:51:39 2024 +0000 libstdc++: Fix redefinition error in std::tuple [PR108822] When using a compiler that doesn't define __cpp_conditional_explicit there's a redefinition error for tuple::__nothrow_assignable. This is because it's defined in different places for the pre-C++20 and C++20 implementations, which are controled by different preprocessor conditions. For certain combinations of C++20 feature test macros it's possible for both __nothrow_assignable definitions to be in scope. Move the pre-C++20 __assignable and __nothrow_assignable definitions adjacent to their use, so that only one set of definitions is visible for any given set of feature test macros. libstdc++-v3/ChangeLog: PR libstdc++/108822 * include/std/tuple (__assignable, __is_nothrow_assignable): Move pre-C++20 definitions adjacent to their use.