diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc new file mode 100644 index 00000000000..23676ad1d7a --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access.cc @@ -0,0 +1,107 @@ +// { dg-do compile { target c++11 } } + +// Copyright (C) 2010-2025 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 +// . + +#include + +#ifdef _GLIBCXX_RELEASE +// Conditional noexcept on these functions is a libstdc++ extension +# define NOTHROW(F) noexcept(noexcept(c.F())) +#else +# define NOTHROW(F) +#endif + +#if __cplusplus >= 201703L +# define CONSTEXPR_17 constexpr +#else +# define CONSTEXPR_17 +#endif + +#if __cplusplus >= 201402L +# define CONSTEXPR_14 constexpr +#else +# define CONSTEXPR_14 +#endif + +namespace std +{ + template + CONSTEXPR_17 auto + begin(C& c) NOTHROW(begin) -> decltype(c.begin()); + template + CONSTEXPR_17 auto + begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); + + template + CONSTEXPR_17 auto + end(C& c) NOTHROW(end) -> decltype(c.end()); + template + CONSTEXPR_17 auto + end(const C& c) NOTHROW(end) -> decltype(c.end()); + + template + CONSTEXPR_14 T* + begin(T (&array)[N]) noexcept; + template + CONSTEXPR_14 T* + end(T (&array)[N]) noexcept; + +#if __cplusplus >= 201402L + template + constexpr auto + cbegin(const C& c) noexcept(noexcept(std::begin(c))) -> decltype(c.begin()); + template + constexpr auto + cend(const C& c) noexcept(noexcept(std::end(c)))-> decltype(c.end()); + + template + CONSTEXPR_17 auto + rbegin(C& c) -> decltype(c.rbegin()); + template + CONSTEXPR_17 auto + rbegin(const C& c) -> decltype(c.rbegin()); + + template + CONSTEXPR_17 auto + rend(C& c) -> decltype(c.rend()); + template + CONSTEXPR_17 auto + rend(const C& c) -> decltype(c.rend()); + + template + CONSTEXPR_17 reverse_iterator + rbegin(T (&array)[N]) noexcept; + template + CONSTEXPR_17 reverse_iterator + rend(T (&array)[N]) noexcept; + + template + CONSTEXPR_17 reverse_iterator + rbegin(initializer_list) noexcept; + template + CONSTEXPR_17 reverse_iterator + rend(initializer_list) noexcept; + + template + CONSTEXPR_17 auto + crbegin(const C& c) -> decltype(std::rbegin(c)); + template + CONSTEXPR_17 auto + cend(const C& c) -> decltype(std::rend(c)); +#endif // C++14 +} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc deleted file mode 100644 index 50f58053112..00000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++11.cc +++ /dev/null @@ -1,40 +0,0 @@ -// { dg-options "-std=gnu++11" } -// { dg-do compile { target c++11_only } } - -// Copyright (C) 2010-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template T* begin(T (&array)[N]) noexcept; - template T* end(T (&array)[N]) noexcept; -} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc deleted file mode 100644 index 6e56927c6a4..00000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++14.cc +++ /dev/null @@ -1,64 +0,0 @@ -// { dg-options "-std=gnu++14" } -// { dg-do compile { target c++14_only } } - -// Copyright (C) 2016-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template constexpr T* begin(T (&array)[N]) noexcept; - template constexpr T* end(T (&array)[N]) noexcept; - - template auto cbegin(const C& c) -> decltype(c.begin()); - template auto cend(const C& c) -> decltype(c.end()); - - template auto rbegin(C& c) -> decltype(c.rbegin()); - template auto rbegin(const C& c) -> decltype(c.rbegin()); - - template auto rend(C& c) -> decltype(c.rend()); - template auto rend(const C& c) -> decltype(c.rend()); - - template - reverse_iterator rbegin(T (&array)[N]) noexcept; - template - reverse_iterator rend(T (&array)[N]) noexcept; - - template - reverse_iterator rbegin(initializer_list) noexcept; - template - reverse_iterator rend(initializer_list) noexcept; - - template - auto crbegin(const C& c) -> decltype(std::rbegin(c)); - template - auto cend(const C& c) -> decltype(std::rend(c)); -} diff --git a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc b/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc deleted file mode 100644 index e6c1c9a9496..00000000000 --- a/libstdc++-v3/testsuite/24_iterators/headers/iterator/range_access_c++17.cc +++ /dev/null @@ -1,63 +0,0 @@ -// { dg-do compile { target c++17 } } - -// Copyright (C) 2016-2025 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 -// . - -#include - -#ifdef _GLIBCXX_RELEASE -// Conditional noexcept on these functions is a libstdc++ extension -# define NOTHROW(F) noexcept(noexcept(c.F())) -#else -# define NOTHROW(F) -#endif - -namespace std -{ - template constexpr auto begin(C& c) NOTHROW(begin) -> decltype(c.begin()); - template constexpr auto begin(const C& c) NOTHROW(begin) -> decltype(c.begin()); - - template constexpr auto end(C& c) NOTHROW(end) -> decltype(c.end()); - template constexpr auto end(const C& c) NOTHROW(end) -> decltype(c.end()); - - template constexpr T* begin(T (&array)[N]) noexcept; - template constexpr T* end(T (&array)[N]) noexcept; - - template constexpr auto cbegin(const C& c) -> decltype(c.begin()); - template constexpr auto cend(const C& c) -> decltype(c.end()); - - template constexpr auto rbegin(C& c) -> decltype(c.rbegin()); - template constexpr auto rbegin(const C& c) -> decltype(c.rbegin()); - - template constexpr auto rend(C& c) -> decltype(c.rend()); - template constexpr auto rend(const C& c) -> decltype(c.rend()); - - template - constexpr reverse_iterator rbegin(T (&array)[N]) noexcept; - template - constexpr reverse_iterator rend(T (&array)[N]) noexcept; - - template - constexpr reverse_iterator rbegin(initializer_list) noexcept; - template - constexpr reverse_iterator rend(initializer_list) noexcept; - - template - constexpr auto crbegin(const C& c) -> decltype(std::rbegin(c)); - template - constexpr auto cend(const C& c) -> decltype(std::rend(c)); -}