diff --git a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html index fb84276be88..35d8aa3ac4b 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_semantics.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_semantics.html @@ -35,10 +35,10 @@ (N.B. In GCC 3.4.x and 4.0.0, due to a bug, -D_GLIBXX_DEBUG_PEDANTIC was also needed. The problem has been fixed in GCC 4.0.1 and later versions.)

The following library components provide extra debugging - capabilities in debug mode:

N.B. although there are precondition checks for some string operations, + capabilities in debug mode:

N.B. although there are precondition checks for some string operations, e.g. operator[], they will not always be run when using the char and -wchar_t specialisations (std::string and +wchar_t specializations (std::string and std::wstring). This is because libstdc++ uses GCC's extern template extension to provide explicit instantiations of std::string and std::wstring, and those diff --git a/libstdc++-v3/doc/html/manual/debug_mode_using.html b/libstdc++-v3/doc/html/manual/debug_mode_using.html index e4f7ea54d22..4deb4980161 100644 --- a/libstdc++-v3/doc/html/manual/debug_mode_using.html +++ b/libstdc++-v3/doc/html/manual/debug_mode_using.html @@ -18,6 +18,17 @@ mode or with debug mode. The following table provides the names and headers of the debugging containers: -

Table 17.1. Debugging Containers

ContainerHeaderDebug containerDebug header
std::bitsetbitset__gnu_debug::bitset<debug/bitset>
std::dequedeque__gnu_debug::deque<debug/deque>
std::listlist__gnu_debug::list<debug/list>
std::mapmap__gnu_debug::map<debug/map>
std::multimapmap__gnu_debug::multimap<debug/map>
std::multisetset__gnu_debug::multiset<debug/set>
std::setset__gnu_debug::set<debug/set>
std::stringstring__gnu_debug::string<debug/string>
std::wstringstring__gnu_debug::wstring<debug/string>
std::basic_stringstring__gnu_debug::basic_string<debug/string>
std::vectorvector__gnu_debug::vector<debug/vector>

In addition, when compiling in C++11 mode, these additional +

Table 17.1. Debugging Containers

ContainerHeaderDebug containerDebug header
std::bitsetbitset__gnu_debug::bitset<debug/bitset>
std::dequedeque__gnu_debug::deque<debug/deque>
std::listlist__gnu_debug::list<debug/list>
std::mapmap__gnu_debug::map<debug/map>
std::multimapmap__gnu_debug::multimap<debug/map>
std::multisetset__gnu_debug::multiset<debug/set>
std::setset__gnu_debug::set<debug/set>
std::stringstring__gnu_debug::string<debug/string>
std::wstringstring__gnu_debug::wstring<debug/string>
std::basic_stringstring__gnu_debug::basic_string<debug/string>
std::vectorvector__gnu_debug::vector<debug/vector>

When compiling in C++11 mode (or newer), these containers have additional debug capability. -

Table 17.2. Debugging Containers C++11

ContainerHeaderDebug containerDebug header
std::arrayarray__gnu_debug::array<debug/array>
std::forward_listforward_list__gnu_debug::forward_list<debug/forward_list>
std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

\ No newline at end of file +

Table 17.2. Debugging Containers C++11

ContainerHeaderDebug containerDebug header
std::forward_listforward_list__gnu_debug::forward_list<debug/forward_list>
std::unordered_mapunordered_map__gnu_debug::unordered_map<debug/unordered_map>
std::unordered_multimapunordered_map__gnu_debug::unordered_multimap<debug/unordered_map>
std::unordered_setunordered_set__gnu_debug::unordered_set<debug/unordered_set>
std::unordered_multisetunordered_set__gnu_debug::unordered_multiset<debug/unordered_set>

Prior to GCC 11 a debug version of std::array +was available as __gnu_debug::array in the +header <debug/array>. +Because array::iterator is just a pointer, +the debug array can't check iterator operations, +it can only check direct accesses to the container. +Starting with GCC 11 all the debug capabilities are available in +std::array, without needing a separate type, +so __gnu_debug::array is just an alias for +std::array. +That alias is deprecated and may be removed in a future release. +

\ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/debug_mode.xml b/libstdc++-v3/doc/xml/manual/debug_mode.xml index 883e8cb4f03..dbd5c2b7775 100644 --- a/libstdc++-v3/doc/xml/manual/debug_mode.xml +++ b/libstdc++-v3/doc/xml/manual/debug_mode.xml @@ -104,6 +104,7 @@ The following library components provide extra debugging capabilities in debug mode: + std::array (no safe iterators) std::basic_string (no safe iterators and see note below) std::bitset std::deque @@ -122,7 +123,7 @@ N.B. although there are precondition checks for some string operations, e.g. operator[], they will not always be run when using the char and -wchar_t specialisations (std::string and +wchar_t specializations (std::string and std::wstring). This is because libstdc++ uses GCC's extern template extension to provide explicit instantiations of std::string and std::wstring, and those @@ -263,7 +264,7 @@ which always works correctly. -In addition, when compiling in C++11 mode, these additional +When compiling in C++11 mode (or newer), these containers have additional debug capability. @@ -285,12 +286,6 @@ containers have additional debug capability. - - std::array - array - __gnu_debug::array - <debug/array> - std::forward_list forward_list @@ -324,6 +319,20 @@ containers have additional debug capability. + +Prior to GCC 11 a debug version of std::array +was available as __gnu_debug::array in the +header <debug/array>. +Because array::iterator is just a pointer, +the debug array can't check iterator operations, +it can only check direct accesses to the container. +Starting with GCC 11 all the debug capabilities are available in +std::array, without needing a separate type, +so __gnu_debug::array is just an alias for +std::array. +That alias is deprecated and may be removed in a future release. + + diff --git a/libstdc++-v3/include/debug/array b/libstdc++-v3/include/debug/array new file mode 100644 index 00000000000..5cb51dfe8b5 --- /dev/null +++ b/libstdc++-v3/include/debug/array @@ -0,0 +1,45 @@ +// Redeclaration of std::array in debug namespace -*- C++ -*- + +// Copyright (C) 2021 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. + +// 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 +// . + +/** @file debug/array + * This file is a GNU debug extension to the Standard C++ Library. + */ + +#ifndef _GLIBCXX_DEBUG_ARRAY +#define _GLIBCXX_DEBUG_ARRAY 1 + +#pragma GCC system_header + +#include + +namespace __gnu_debug +{ + template + using array _GLIBCXX_DEPRECATED_SUGGEST("std::array") + = std::array<_Tp, _Nm>; + + using std::get; + using std::swap; +} +#endif // _GLIBCXX_DEBUG_ARRAY