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.

Reply via email to