[gcc/devel/c++-coroutines] libstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span

Iain D Sandoe iains@gcc.gnu.org
Tue Feb 18 20:46:00 GMT 2020


https://gcc.gnu.org/g:f5b4dc38852f755de9c48cb78a773ab4e84b8078

commit f5b4dc38852f755de9c48cb78a773ab4e84b8078
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Feb 18 12:29:29 2020 +0000

    libstdc++: P2116R0 Remove tuple-like protocol support from fixed-extent span
    
    Following this change it's no longer possible to use std::span with
    structured bindings or with the tuple-like API. It will probably come
    back for C++23 though.
    
    	P2116R0 Remove tuple-like protocol support from fixed-extent span
    	* include/std/span (get, tuple_size, tuple_element): Remove.
    	* testsuite/23_containers/span/everything.cc: Remove checks for
    	tuple-like API.
    	* testsuite/23_containers/span/get_neg.cc: Remove.
    	* testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
    	* testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
    	* testsuite/23_containers/span/tuple_size_neg.cc: Remove.

Diff:
---
 libstdc++-v3/ChangeLog                             | 11 ++++++++
 libstdc++-v3/include/std/span                      | 30 ----------------------
 .../testsuite/23_containers/span/everything.cc     |  4 ---
 .../testsuite/23_containers/span/get_neg.cc        | 30 ----------------------
 .../span/tuple_element_dynamic_neg.cc              | 25 ------------------
 .../23_containers/span/tuple_element_oob_neg.cc    | 25 ------------------
 .../testsuite/23_containers/span/tuple_size_neg.cc | 25 ------------------
 7 files changed, 11 insertions(+), 139 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index ea53bb7..7534695 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,14 @@
+2020-02-18  Jonathan Wakely  <jwakely@redhat.com>
+
+	P2116R0 Remove tuple-like protocol support from fixed-extent span
+	* include/std/span (get, tuple_size, tuple_element): Remove.
+	* testsuite/23_containers/span/everything.cc: Remove checks for
+	tuple-like API.
+	* testsuite/23_containers/span/get_neg.cc: Remove.
+	* testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
+	* testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
+	* testsuite/23_containers/span/tuple_size_neg.cc: Remove.
+
 2020-02-17  Patrick Palka  <ppalka@redhat.com>
 
 	P2106R0 Alternative wording for GB315 and GB316
diff --git a/libstdc++-v3/include/std/span b/libstdc++-v3/include/std/span
index 0072010..b8d5e07 100644
--- a/libstdc++-v3/include/std/span
+++ b/libstdc++-v3/include/std/span
@@ -440,36 +440,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       return {reinterpret_cast<byte*>(__sp.data()), __sp.size_bytes()};
     }
 
-  // tuple helpers
-  template<size_t _Index, typename _Type, size_t _Extent>
-    constexpr _Type&
-    get(span<_Type, _Extent> __sp) noexcept
-    {
-      static_assert(_Extent != dynamic_extent && _Index < _Extent,
-	"get<I> can only be used with a span of non-dynamic (fixed) extent");
-      return __sp[_Index];
-    }
-
-  template<typename _Tp> struct tuple_size;
-  template<size_t __i, typename _Tp> struct tuple_element;
-
-  template<typename _Type, size_t _Extent>
-    struct tuple_size<span<_Type, _Extent>>
-    : public integral_constant<size_t, _Extent>
-    {
-      static_assert(_Extent != dynamic_extent, "tuple_size can only "
-	"be used with a span of non-dynamic (fixed) extent");
-    };
-
-  template<size_t _Index, typename _Type, size_t _Extent>
-    struct tuple_element<_Index, span<_Type, _Extent>>
-    {
-      static_assert(_Extent != dynamic_extent, "tuple_element can only "
-	"be used with a span of non-dynamic (fixed) extent");
-      static_assert(_Index < _Extent, "Index is less than Extent");
-      using type = _Type;
-    };
-
   namespace ranges
   {
     template<typename> extern inline const bool enable_safe_range;
diff --git a/libstdc++-v3/testsuite/23_containers/span/everything.cc b/libstdc++-v3/testsuite/23_containers/span/everything.cc
index c2f0068..0cca06f 100644
--- a/libstdc++-v3/testsuite/23_containers/span/everything.cc
+++ b/libstdc++-v3/testsuite/23_containers/span/everything.cc
@@ -104,8 +104,6 @@ main()
   static_assert(data_span_first.size() == 3);
   static_assert(data_span_first.front() == 0);
   static_assert(data_span_first.back() == 2);
-  static_assert(std::tuple_size_v<decltype(data_span_first)> == 3);
-  static_assert(std::is_same_v<std::tuple_element_t<0, decltype(data_span_first)>, const int>);
 
   constexpr auto data_span_first_dyn = data_span.first(4);
   static_assert(
@@ -122,8 +120,6 @@ main()
   static_assert(data_span_last.size() == 5);
   static_assert(data_span_last.front() == 4);
   static_assert(data_span_last.back() == 8);
-  static_assert(std::tuple_size_v<decltype(data_span_last)> == 5);
-  static_assert(std::is_same_v<std::tuple_element_t<0, decltype(data_span_last)>, const int>);
 
   constexpr auto data_span_last_dyn = data_span.last(6);
   static_assert(
diff --git a/libstdc++-v3/testsuite/23_containers/span/get_neg.cc b/libstdc++-v3/testsuite/23_containers/span/get_neg.cc
deleted file mode 100644
index 65ff412..0000000
--- a/libstdc++-v3/testsuite/23_containers/span/get_neg.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2019-2020 Free Software Foundation, Inc.
-//
-// 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.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3.  If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-options "-std=c++2a" }
-// { dg-do compile { target c++2a } }
-
-#include <span>
-#include <tuple>
-
-int
-main()
-{
-  std::span<int, std::dynamic_extent> myspan((int*)nullptr, (std::size_t)0);
-  std::get<0>(myspan); // { dg-error "here" }
-}
-// { dg-error "static assertion failed" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/23_containers/span/tuple_element_dynamic_neg.cc b/libstdc++-v3/testsuite/23_containers/span/tuple_element_dynamic_neg.cc
deleted file mode 100644
index b96d888..0000000
--- a/libstdc++-v3/testsuite/23_containers/span/tuple_element_dynamic_neg.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2019-2020 Free Software Foundation, Inc.
-//
-// 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.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3.  If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-options "-std=c++2a" }
-// { dg-do compile { target c++2a } }
-
-#include <span>
-#include <tuple>
-
-std::tuple_element<0, std::span<int, std::dynamic_extent>> ts; // { dg-error "here" }
-// { dg-error "static assertion failed" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/23_containers/span/tuple_element_oob_neg.cc b/libstdc++-v3/testsuite/23_containers/span/tuple_element_oob_neg.cc
deleted file mode 100644
index e9627ab..0000000
--- a/libstdc++-v3/testsuite/23_containers/span/tuple_element_oob_neg.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2019-2020 Free Software Foundation, Inc.
-//
-// 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.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3.  If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-options "-std=c++2a" }
-// { dg-do compile { target c++2a } }
-
-#include <span>
-#include <tuple>
-
-std::tuple_element<3, std::span<int, 2>> te; // { dg-error "here" }
-// { dg-error "static assertion failed" "" { target *-*-* } 0 }
diff --git a/libstdc++-v3/testsuite/23_containers/span/tuple_size_neg.cc b/libstdc++-v3/testsuite/23_containers/span/tuple_size_neg.cc
deleted file mode 100644
index 1629473..0000000
--- a/libstdc++-v3/testsuite/23_containers/span/tuple_size_neg.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (C) 2019-2020 Free Software Foundation, Inc.
-//
-// 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.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3.  If not see
-// <http://www.gnu.org/licenses/>.
-
-// { dg-options "-std=c++2a" }
-// { dg-do compile { target c++2a } }
-
-#include <span>
-#include <tuple>
-
-std::tuple_size<std::span<int, std::dynamic_extent>> ts; // { dg-error "here" }
-// { dg-error "static assertion failed" "" { target *-*-* } 0 }



More information about the Libstdc++-cvs mailing list