On Thu, 22 May 2025 at 13:23, Daniel Krügler <daniel.krueg...@gmail.com> wrote: > > Am Do., 22. Mai 2025 um 11:48 Uhr schrieb Tomasz Kamiński > <tkami...@redhat.com>: >> >> From: Jonathan Wakely <jwak...@redhat.com> >> >> This papers implements C++27 std::indirect as specified >> in P3019 with ammendment to move assgiment from LWG 4251. >> >> PR libstdc++/119152 >> >> libstdc++-v3/ChangeLog: >> >> * include/Makefile.am: Add new header. >> * include/Makefile.in: Regenerate. >> * include/bits/indirect.h: New file. >> * include/bits/version.def (indirect): Define. >> * include/bits/version.h: Regenerate. >> * include/std/memory: Include new header. >> * testsuite/std/memory/indirect/copy.cc >> * testsuite/std/memory/indirect/copy_alloc.cc >> * testsuite/std/memory/indirect/ctor.cc >> * testsuite/std/memory/indirect/incomplete.cc >> * testsuite/std/memory/indirect/invalid_neg.cc >> * testsuite/std/memory/indirect/move.cc >> * testsuite/std/memory/indirect/move_alloc.cc >> * testsuite/std/memory/indirect/relops.cc >> >> Co-Authored-By: Tomasz Kamiński <tkami...@redhat.com> >> Signed-off-by: Tomasz Kamiński <tkami...@redhat.com> >> --- >> Tested on x86_64-linux. OK for trunk? >> >> libstdc++-v3/include/Makefile.am | 1 + >> libstdc++-v3/include/Makefile.in | 1 + >> libstdc++-v3/include/bits/indirect.h | 459 ++++++++++++++++++ >> libstdc++-v3/include/bits/version.def | 9 + >> libstdc++-v3/include/bits/version.h | 10 + >> libstdc++-v3/include/std/memory | 5 + >> .../testsuite/std/memory/indirect/copy.cc | 121 +++++ >> .../std/memory/indirect/copy_alloc.cc | 228 +++++++++ >> .../testsuite/std/memory/indirect/ctor.cc | 203 ++++++++ >> .../std/memory/indirect/incomplete.cc | 38 ++ >> .../std/memory/indirect/invalid_neg.cc | 28 ++ >> .../testsuite/std/memory/indirect/move.cc | 144 ++++++ >> .../std/memory/indirect/move_alloc.cc | 296 +++++++++++ >> .../testsuite/std/memory/indirect/relops.cc | 82 ++++ >> 14 files changed, 1625 insertions(+) >> create mode 100644 libstdc++-v3/include/bits/indirect.h >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/copy.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/copy_alloc.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/ctor.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/incomplete.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/invalid_neg.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/move.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/move_alloc.cc >> create mode 100644 libstdc++-v3/testsuite/std/memory/indirect/relops.cc >> >> diff --git a/libstdc++-v3/include/Makefile.am >> b/libstdc++-v3/include/Makefile.am >> index 3e5b6c4142e..b67d470c27e 100644 >> --- a/libstdc++-v3/include/Makefile.am >> +++ b/libstdc++-v3/include/Makefile.am >> @@ -210,6 +210,7 @@ bits_headers = \ >> ${bits_srcdir}/gslice_array.h \ >> ${bits_srcdir}/hashtable.h \ >> ${bits_srcdir}/hashtable_policy.h \ >> + ${bits_srcdir}/indirect.h \ >> ${bits_srcdir}/indirect_array.h \ >> ${bits_srcdir}/ios_base.h \ >> ${bits_srcdir}/istream.tcc \ >> diff --git a/libstdc++-v3/include/Makefile.in >> b/libstdc++-v3/include/Makefile.in >> index 3531162b5f7..6f7f2be68fd 100644 >> --- a/libstdc++-v3/include/Makefile.in >> +++ b/libstdc++-v3/include/Makefile.in >> @@ -563,6 +563,7 @@ bits_freestanding = \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/gslice_array.h \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable.h \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/hashtable_policy.h \ >> +@GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect.h \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/indirect_array.h \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/ios_base.h \ >> @GLIBCXX_HOSTED_TRUE@ ${bits_srcdir}/istream.tcc \ >> diff --git a/libstdc++-v3/include/bits/indirect.h >> b/libstdc++-v3/include/bits/indirect.h >> new file mode 100644 >> index 00000000000..32b2af9117d >> --- /dev/null >> +++ b/libstdc++-v3/include/bits/indirect.h >> @@ -0,0 +1,459 @@ >> +// Vocabulary Types for Composite Class Design -*- C++ -*- >> + >> +// Copyright The GNU Toolchain Authors. >> +// >> +// This file is part of the GNU ISO C++ Library. This library is free >> +// software; you can redistribute it and/or modify it under the >> +// terms of the GNU General Public License as published by the >> +// Free Software Foundation; either version 3, or (at your option) >> +// any later version. >> + >> +// This library is distributed in the hope that it will be useful, >> +// but WITHOUT ANY WARRANTY; without even the implied warranty of >> +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> +// GNU General Public License for more details. >> + >> +// Under Section 7 of GPL version 3, you are granted additional >> +// permissions described in the GCC Runtime Library Exception, version >> +// 3.1, as published by the Free Software Foundation. >> + >> +// You should have received a copy of the GNU General Public License and >> +// a copy of the GCC Runtime Library Exception along with this program; >> +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see >> +// <http://www.gnu.org/licenses/>. >> + >> +/** @file include/bits/indirect.h >> + * This is an internal header file, included by other library headers. >> + * Do not attempt to use it directly. @headername{memory} XXX right >> header? > > > Is the trailing "XXX right header?" a spurious comment that should be > actually removed?
Ah yes! That was a reminder to myself to check if <memory> is really where these classes are meant to be defined, and I forgot to remove it.