]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix uses of non-reserved names for template parameters
authorJonathan Wakely <jwakely@redhat.com>
Mon, 2 Sep 2019 11:09:45 +0000 (12:09 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 2 Sep 2019 11:09:45 +0000 (12:09 +0100)
Backport from mainline
2019-05-17  Jonathan Wakely  <jwakely@redhat.com>

* include/bits/random.h (seed_seq::param): Fix non-reserved name.
* include/experimental/type_traits (is_detected_exact)
(is_detected_exact_v): Likewise.
* testsuite/17_intro/names.cc: Check for more non-reserved names.
* testsuite/experimental/names.cc: New test.

From-SVN: r275306

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/random.h
libstdc++-v3/include/experimental/type_traits
libstdc++-v3/testsuite/17_intro/names.cc
libstdc++-v3/testsuite/experimental/names.cc [new file with mode: 0644]

index 24c84777437e57a1edc6cf4fb2e32ca996294b6e..811411d5ab4a96f241c67badc90894a0632f3b12 100644 (file)
@@ -1,3 +1,14 @@
+2019-09-02  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2019-05-17  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/random.h (seed_seq::param): Fix non-reserved name.
+       * include/experimental/type_traits (is_detected_exact)
+       (is_detected_exact_v): Likewise.
+       * testsuite/17_intro/names.cc: Check for more non-reserved names.
+       * testsuite/experimental/names.cc: New test.
+
 2019-06-26  Jonathan Wakely  <jwakely@redhat.com>
 
        Backport from mainline
index c3fbb0fff164b349c004787c6323720e75595d79..d1df37292ddd2114f9aeb6262488f7178b35b1b3 100644 (file)
@@ -5982,9 +5982,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     size_t size() const noexcept
     { return _M_v.size(); }
 
-    template<typename OutputIterator>
+    template<typename _OutputIterator>
       void
-      param(OutputIterator __dest) const
+      param(_OutputIterator __dest) const
       { std::copy(_M_v.begin(), _M_v.end(), __dest); }
 
     // no copy functions
index 605a92e86fecd92c63d3916d0ebbd81cdbca7538..f6e80d6cafe7ab5140b3a04e789197519e68fa3a 100644 (file)
@@ -254,12 +254,12 @@ template<typename _Default, template<typename...> class _Op, typename... _Args>
 template<typename _Default, template<typename...> class _Op, typename... _Args>
   using detected_or_t = typename detected_or<_Default, _Op, _Args...>::type;
 
-template<typename Expected, template<typename...> class _Op, typename... _Args>
-  using is_detected_exact = is_same<Expected, detected_t<_Op, _Args...>>;
+template<typename _Expected, template<typename...> class _Op, typename... _Args>
+  using is_detected_exact = is_same<_Expected, detected_t<_Op, _Args...>>;
 
-template<typename Expected, template<typename...> class _Op, typename... _Args>
+template<typename _Expected, template<typename...> class _Op, typename... _Args>
   constexpr bool is_detected_exact_v
-    = is_detected_exact<Expected, _Op, _Args...>::value;
+    = is_detected_exact<_Expected, _Op, _Args...>::value;
 
 template<typename _To, template<typename...> class _Op, typename... _Args>
   using is_detected_convertible
index 158895e89d2345b77d8127814161940841e53e2a..cc4b47a40d3eb95ea2de0f61f7005e73fa7afe2a 100644 (file)
@@ -19,7 +19,6 @@
 
 // Define macros for some common variables names that we must not use for
 // naming variables, parameters etc. in the library.
-#define tmp (
 #define A (
 #define B (
 #define C (
 #define y (
 #define z (
 
+#define tmp (
+
+#if __cplusplus < 201703L
+// <charconv> defines to_chars_result::ptr and to_chars_result::ec
+#define ec (
+#define ptr (
+#endif
+
+// Common template parameter names
+#define OutputIterator         OutputIterator is not a reserved name
+#define InputIterator          InputIterator is not a reserved name
+#define ForwardIterator                ForwardIterator is not a reserved name
+#define BidirectionalIterator  BidirectionalIterator is not a reserved name
+#define RandomAccessIterator   RandomAccessIterator is not a reserved name
+#define RandomAccessOutputIterator     RandomAccessOutputIterator is not a reserved name
+#define RAIter                 RAIter is not a reserved name
+#define FwdIter                        FwdIter is not a reserved name
+#define OutIter                        OutIter is not a reserved name
+#define InIter                 InIter is not a reserved name
+
+#define Alloc                  Alloc is not a reserved name
+#define BinaryFunction1                BinaryFunction1 is not a reserved name
+#define BinaryFunction2                BinaryFunction2 is not a reserved name
+#define Char                   Char is not a reserved name
+#define CharT                  CharT is not a reserved name
+#define Cmp                    Cmp is not a reserved name
+#define Compare                        Compare is not a reserved name
+#define Const_Iterator         Const_Iterator is not a reserved name
+#define Const_Key_Reference    Const_Key_Reference is not a reserved name
+#define Const_Node_Iter                Const_Node_Iter is not a reserved name
+#define Const_Pointer          Const_Pointer is not a reserved name
+#define Const_Reference                Const_Reference is not a reserved name
+#define Data                   Data is not a reserved name
+#define DiffType               DiffType is not a reserved name
+#define Eq                     Eq is not a reserved name
+#define ExecPolicy             ExecPolicy is not a reserved name
+#define Expected               Expected is not a reserved name
+#define External_Load_Access   External_Load_Access is not a reserved name
+#define External_Size_Access   External_Size_Access is not a reserved name
+#define Fn                     Fn is not a reserved name
+#define Function               Function is not a reserved name
+#define Functor                        Functor is not a reserved name
+#define Hash                   Hash is not a reserved name
+#define H1                     H1 is not a reserved name
+#define H2                     H2 is not a reserved name
+#define Head                   Head is not a reserved name
+#define It                     It is not a reserved name
+#define Iter                   Iter is not a reserved name
+#define Iterator               Iterator is not a reserved name
+#define Key                    Key is not a reserved name
+#define Mapped                 Mapped is not a reserved name
+#define Node                   Node is not a reserved name
+#define Node_iter              Node_iter is not a reserved name
+#define Node_ptr               Node_ptr is not a reserved name
+#define Overflow               Overflow is not a reserved name
+#define Pointer                        Pointer is not a reserved name
+#define Policy                 Policy is not a reserved name
+#define Pred                   Pred is not a reserved name
+#define Ptr                    Ptr is not a reserved name
+#define Reference              Reference is not a reserved name
+#define Seq                    Seq is not a reserved name
+#define Seq_RAIter             Seq_RAIter is not a reserved name
+#define Series                 Series is not a reserved name
+#define Set                    Set is not a reserved name
+#define String                 String is not a reserved name
+#define Tp                     Tp is not a reserved name
+#define Traits                 Traits is not a reserved name
+#define Type                   Type is not a reserved name
+#define Value                  Value is not a reserved name
+#define ValueT                 ValueT is not a reserved name
+#define ValueType              ValueType is not a reserved name
+
 #ifdef _AIX
 // See https://gcc.gnu.org/ml/libstdc++/2017-03/msg00015.html
 #undef f
 #undef y
 #endif
 
+#ifdef __sun__
+// See https://gcc.gnu.org/ml/libstdc++/2019-05/msg00175.html
+#undef ptr
+#endif
+
 #include <bits/stdc++.h>
diff --git a/libstdc++-v3/testsuite/experimental/names.cc b/libstdc++-v3/testsuite/experimental/names.cc
new file mode 100644 (file)
index 0000000..1d2e7c0
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright (C) 2017-2019 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-do compile }
+
+// Define macros for some common variables names that we must not use for
+// naming variables, parameters etc. in the library.
+
+#include "../17_intro/names.cc"
+// Filesystem
+#if __has_include(<experimental/filesystem>)
+# include <experimental/filesystem>
+#endif
+// Library Fundamentals
+#include <experimental/algorithm>
+#include <experimental/any>
+#include <experimental/array>
+#include <experimental/chrono>
+#include <experimental/deque>
+#include <experimental/forward_list>
+#include <experimental/functional>
+#include <experimental/iterator>
+#include <experimental/list>
+#include <experimental/map>
+#include <experimental/memory>
+#include <experimental/memory_resource>
+#include <experimental/numeric>
+#include <experimental/optional>
+#include <experimental/propagate_const>
+#include <experimental/random>
+#include <experimental/ratio>
+#include <experimental/regex>
+#include <experimental/set>
+#include <experimental/source_location>
+#include <experimental/string>
+#include <experimental/string_view>
+#include <experimental/system_error>
+#include <experimental/tuple>
+#include <experimental/type_traits>
+#include <experimental/unordered_map>
+#include <experimental/unordered_set>
+#include <experimental/utility>
+#include <experimental/vector>