On Fri, 23 May 2025 at 16:31, Tomasz Kaminski <tkami...@redhat.com> wrote: > > > > On Fri, May 23, 2025 at 1:52 PM Jonathan Wakely <jwak...@redhat.com> wrote: >> >> On 23/05/25 10:03 +0100, Jonathan Wakely wrote: >> >On 22/05/25 14:50 +0200, Tomasz Kamiński wrote: >> >>From: Jonathan Wakely <jwak...@redhat.com> >> >> >> >>This papers implements C++26 std::indirect as specified >> >>in P3019 with amendment to move assignment 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> >> >>--- >> >>Changes in v2: >> >>- Fixed typos in commit messages as pointed by Jakub >> >>- Removed stray comment in indirect.h header as pointed out by Daniel >> >> >> >>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..3fd9807a8fd >> >>--- /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} >> >>+ */ >> >>+ >> >>+#ifndef _GLIBCXX_INDIRECT_H >> >>+#define _GLIBCXX_INDIRECT_H 1 >> >>+ >> >>+#pragma GCC system_header >> >>+ >> >>+#include <bits/version.h> >> >>+ >> >>+#ifdef __glibcxx_indirect || __glibcxx_polymorphic // >= C++26 >> > >> >This needs to be #if defined(x) || defined(y) not #ifdef (my fault). >> >> Or just #if x || y > > Just to confirm, the patch is still OK for trunk with this changed to: > #if __glibcxx_indirect || __glibcxx_polymorphic // >= C++26 > (And I think this is my fault).
Yes, still OK.