---
name: "__gnu_debug"
section: "3cxx"
platform: "linux"
package: "libstdc++-12-doc"
version: "12.4.0-5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/__gnu_debug/3cxx"
---

# \_\_gnu\_debug(3cxx)

GNU debug classes for public use.

## NAME

\_\_gnu\_debug - GNU debug classes for public use.

## SYNOPSIS

### Classes

class **\_After\_nth\_from**\
 struct **\_BeforeBeginHelper**\
 class **\_Equal\_to**\
 class **\_Not\_equal\_to**\
 class **\_Safe\_container**\
 Safe class dealing with some allocator dependent operations.  class **\_Safe\_forward\_list**\
 Special iterators swap and invalidation for forward\_list because of the before\_begin iterator.  class **\_Safe\_iterator**\
 Safe iterator wrapper.  class **\_Safe\_iterator\_base**\
 Basic functionality for a *safe* iterator.  class **\_Safe\_local\_iterator**\
 Safe iterator wrapper.  class **\_Safe\_local\_iterator\_base**\
 Basic functionality for a *safe* iterator.  class **\_Safe\_node\_sequence**\
 Like \_Safe\_sequence but with a special \_M\_invalidate\_all implementation not invalidating past-the-end iterators. Used by node based sequence.  class **\_Safe\_sequence**\
 Base class for constructing a *safe* sequence type that tracks iterators that reference it.  class **\_Safe\_sequence\_base**\
 Base class that supports tracking of iterators that reference a sequence.  class **\_Safe\_unordered\_container**\
 Base class for constructing a *safe* unordered container type that tracks iterators that reference it.  class **\_Safe\_unordered\_container\_base**\
 Base class that supports tracking of local iterators that reference an unordered container.  class **\_Safe\_vector**\
 Base class for Debug Mode vector.  struct **\_Sequence\_traits**\
 class **basic\_string**\
 Class std::basic\_string with safety/checking/debug instrumentation.

### Typedefs

typedef **basic\_string**\< char \> **string**\
 typedef **basic\_string**\< char16\_t \> **u16string**\
 A string of `char16_t`.  typedef **basic\_string**\< char32\_t \> **u32string**\
 A string of `char32_t`.  typedef **basic\_string**\< wchar\_t \> **wstring**\

### Enumerations

enum **\_Debug\_msg\_id** { **\_\_msg\_valid\_range**, **\_\_msg\_insert\_singular**, **\_\_msg\_insert\_different**, **\_\_msg\_erase\_bad**, **\_\_msg\_erase\_different**, **\_\_msg\_subscript\_oob**, **\_\_msg\_empty**, **\_\_msg\_unpartitioned**, **\_\_msg\_unpartitioned\_pred**, **\_\_msg\_unsorted**, **\_\_msg\_unsorted\_pred**, **\_\_msg\_not\_heap**, **\_\_msg\_not\_heap\_pred**, **\_\_msg\_bad\_bitset\_write**, **\_\_msg\_bad\_bitset\_read**, **\_\_msg\_bad\_bitset\_flip**, **\_\_msg\_self\_splice**, **\_\_msg\_splice\_alloc**, **\_\_msg\_splice\_bad**, **\_\_msg\_splice\_other**, **\_\_msg\_splice\_overlap**, **\_\_msg\_init\_singular**, **\_\_msg\_init\_copy\_singular**, **\_\_msg\_init\_const\_singular**, **\_\_msg\_copy\_singular**, **\_\_msg\_bad\_deref**, **\_\_msg\_bad\_inc**, **\_\_msg\_bad\_dec**, **\_\_msg\_iter\_subscript\_oob**, **\_\_msg\_advance\_oob**, **\_\_msg\_retreat\_oob**, **\_\_msg\_iter\_compare\_bad**, **\_\_msg\_compare\_different**, **\_\_msg\_iter\_order\_bad**, **\_\_msg\_order\_different**, **\_\_msg\_distance\_bad**, **\_\_msg\_distance\_different**, **\_\_msg\_deref\_istream**, **\_\_msg\_inc\_istream**, **\_\_msg\_output\_ostream**, **\_\_msg\_deref\_istreambuf**, **\_\_msg\_inc\_istreambuf**, **\_\_msg\_insert\_after\_end**, **\_\_msg\_erase\_after\_bad**, **\_\_msg\_valid\_range2**, **\_\_msg\_local\_iter\_compare\_bad**, **\_\_msg\_non\_empty\_range**, **\_\_msg\_self\_move\_assign**, **\_\_msg\_bucket\_index\_oob**, **\_\_msg\_valid\_load\_factor**, **\_\_msg\_equal\_allocs**, **\_\_msg\_insert\_range\_from\_self**, **\_\_msg\_irreflexive\_ordering** }\
 enum **\_Distance\_precision** { **\_\_dp\_none**, **\_\_dp\_equality**, **\_\_dp\_sign**, **\_\_dp\_sign\_max\_size**, **\_\_dp\_exact** }\

### Functions

template\<typename \_Iterator \> constexpr \_Iterator **\_\_base** (\_Iterator \_\_it)\
 template\<typename \_Iterator , typename \_Sequence \> \_Iterator **\_\_base** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, **std::random\_access\_iterator\_tag** \> &\_\_it)\
 template\<typename \_Iterator \> constexpr auto **\_\_base** (const **std::move\_iterator**\< \_Iterator \> &\_\_it) -\> decltype(std::make\_move\_iterator(\_\_base(\_\_it.base())))\
 template\<typename \_Iterator , typename \_Sequence \> constexpr **std::reverse\_iterator**\< \_Iterator \> **\_\_base** (const **std::reverse\_iterator**\< **\_Safe\_iterator**\< \_Iterator, \_Sequence, **std::random\_access\_iterator\_tag** \> \> &\_\_it)\
 template\<typename \_InputIterator , typename \_Size \> constexpr bool **\_\_can\_advance** (\_InputIterator, \_Size)\
 template\<typename \_InputIterator , typename \_Diff \> constexpr bool **\_\_can\_advance** (\_InputIterator, const **std::pair**\< \_Diff, **\_Distance\_precision** \> &, int)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_Size \> bool **\_\_can\_advance** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, \_Size)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_Diff \> bool **\_\_can\_advance** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const **std::pair**\< \_Diff, **\_Distance\_precision** \> &, int)\
 template\<typename \_Iterator , typename \_Size \> constexpr bool **\_\_can\_advance** (const **std::move\_iterator**\< \_Iterator \> &\_\_it, \_Size \_\_n)\
 template\<typename \_Iterator , typename \_Diff \> constexpr bool **\_\_can\_advance** (const **std::move\_iterator**\< \_Iterator \> &\_\_it, const **std::pair**\< \_Diff, **\_Distance\_precision** \> &\_\_dist, int \_\_way)\
 template\<typename \_Iterator , typename \_Size \> constexpr bool **\_\_can\_advance** (const **std::reverse\_iterator**\< \_Iterator \> &\_\_it, \_Size \_\_n)\
 template\<typename \_Iterator , typename \_Diff \> constexpr bool **\_\_can\_advance** (const **std::reverse\_iterator**\< \_Iterator \> &\_\_it, const **std::pair**\< \_Diff, **\_Distance\_precision** \> &\_\_dist, int \_\_way)\
 template\<typename \_ForwardIterator , typename \_Tp \> constexpr bool **\_\_check\_partitioned\_lower** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, const \_Tp &\_\_value)\
 template\<typename \_ForwardIterator , typename \_Tp , typename \_Pred \> constexpr bool **\_\_check\_partitioned\_lower** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, const \_Tp &\_\_value, \_Pred \_\_pred)\
 template\<typename \_ForwardIterator , typename \_Tp \> constexpr bool **\_\_check\_partitioned\_upper** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, const \_Tp &\_\_value)\
 template\<typename \_ForwardIterator , typename \_Tp , typename \_Pred \> constexpr bool **\_\_check\_partitioned\_upper** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, const \_Tp &\_\_value, \_Pred \_\_pred)\
 template\<typename \_Iterator \> constexpr bool **\_\_check\_singular** (\_Iterator const &)\
 template\<typename \_Tp \> constexpr bool **\_\_check\_singular** (\_Tp \*const &\_\_ptr)\
 bool **\_\_check\_singular\_aux** (const **\_Safe\_iterator\_base** \*\_\_x)\
 bool **\_\_check\_singular\_aux** (const void \*)\
 template\<typename \_InputIterator \> constexpr bool **\_\_check\_sorted** (const \_InputIterator &\_\_first, const \_InputIterator &\_\_last)\
 template\<typename \_InputIterator , typename \_Predicate \> constexpr bool **\_\_check\_sorted** (const \_InputIterator &\_\_first, const \_InputIterator &\_\_last, \_Predicate \_\_pred)\
 template\<typename \_ForwardIterator , typename \_Predicate \> constexpr bool **\_\_check\_sorted\_aux** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, \_Predicate \_\_pred, **std::forward\_iterator\_tag**)\
 template\<typename \_ForwardIterator \> constexpr bool **\_\_check\_sorted\_aux** (\_ForwardIterator \_\_first, \_ForwardIterator \_\_last, **std::forward\_iterator\_tag**)\
 template\<typename \_InputIterator , typename \_Predicate \> constexpr bool **\_\_check\_sorted\_aux** (const \_InputIterator &, const \_InputIterator &, \_Predicate, **std::input\_iterator\_tag**)\
 template\<typename \_InputIterator \> constexpr bool **\_\_check\_sorted\_aux** (const \_InputIterator &, const \_InputIterator &, **std::input\_iterator\_tag**)\
 template\<typename \_InputIterator1 , typename \_InputIterator2 \> constexpr bool **\_\_check\_sorted\_set** (const \_InputIterator1 &\_\_first, const \_InputIterator1 &\_\_last, const \_InputIterator2 &)\
 template\<typename \_InputIterator1 , typename \_InputIterator2 , typename \_Predicate \> constexpr bool **\_\_check\_sorted\_set** (const \_InputIterator1 &\_\_first, const \_InputIterator1 &\_\_last, const \_InputIterator2 &, \_Predicate \_\_pred)\
 template\<typename \_InputIterator , typename \_Predicate \> constexpr bool **\_\_check\_sorted\_set\_aux** (const \_InputIterator &, const \_InputIterator &, \_Predicate, std::\_\_false\_type)\
 template\<typename \_InputIterator \> constexpr bool **\_\_check\_sorted\_set\_aux** (const \_InputIterator &, const \_InputIterator &, std::\_\_false\_type)\
 template\<typename \_InputIterator , typename \_Predicate \> constexpr bool **\_\_check\_sorted\_set\_aux** (const \_InputIterator &\_\_first, const \_InputIterator &\_\_last, \_Predicate \_\_pred, std::\_\_true\_type)\
 template\<typename \_InputIterator \> constexpr bool **\_\_check\_sorted\_set\_aux** (const \_InputIterator &\_\_first, const \_InputIterator &\_\_last, std::\_\_true\_type)\
 template\<typename \_CharT , typename \_Integer \> const \_CharT \* **\_\_check\_string** (const \_CharT \*\_\_s, \_Integer \_\_n, const char \*\_\_file, unsigned int \_\_line, const char \*\_\_function)\
 template\<typename \_CharT \> const \_CharT \* **\_\_check\_string** (const \_CharT \*\_\_s, const char \*\_\_file, unsigned int \_\_line, const char \*\_\_function)\
 template\<typename \_InputIterator \> \_InputIterator **\_\_check\_valid\_range** (const \_InputIterator &\_\_first, const \_InputIterator &\_\_last, const char \*\_\_file, unsigned int \_\_line, const char \*\_\_function)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_InputIterator \> bool **\_\_foreign\_iterator** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, \_InputIterator \_\_other, \_InputIterator \_\_other\_end)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_Integral \> bool **\_\_foreign\_iterator\_aux** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, \_Integral, \_Integral, std::\_\_true\_type)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_InputIterator \> bool **\_\_foreign\_iterator\_aux** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, \_InputIterator \_\_other, \_InputIterator \_\_other\_end, std::\_\_false\_type)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_OtherIterator , typename \_OtherSequence , typename \_OtherCategory \> bool **\_\_foreign\_iterator\_aux2** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const **\_Safe\_iterator**\< \_OtherIterator, \_OtherSequence, \_OtherCategory \> &, const **\_Safe\_iterator**\< \_OtherIterator, \_OtherSequence, \_OtherCategory \> &)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_InputIterator \> bool **\_\_foreign\_iterator\_aux2** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, const \_InputIterator &\_\_other, const \_InputIterator &\_\_other\_end)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_OtherIterator \> bool **\_\_foreign\_iterator\_aux2** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, const **\_Safe\_iterator**\< \_OtherIterator, \_Sequence, \_Category \> &\_\_other, const **\_Safe\_iterator**\< \_OtherIterator, \_Sequence, \_Category \> &)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_InputIterator \> bool **\_\_foreign\_iterator\_aux3** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const \_InputIterator &, const \_InputIterator &, std::\_\_false\_type)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_InputIterator \> bool **\_\_foreign\_iterator\_aux3** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, const \_InputIterator &\_\_other, const \_InputIterator &\_\_other\_end, std::\_\_true\_type)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category \> bool **\_\_foreign\_iterator\_aux4** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &,...)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category \> bool **\_\_foreign\_iterator\_aux4** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &\_\_it, const typename \_Sequence::value\_type \*\_\_other)\
 template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type **\_\_get\_distance** (\_Iterator \_\_lhs, \_Iterator \_\_rhs)\
 template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type **\_\_get\_distance** (\_Iterator \_\_lhs, \_Iterator \_\_rhs, **std::input\_iterator\_tag**)\
 template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type **\_\_get\_distance** (\_Iterator \_\_lhs, \_Iterator \_\_rhs, **std::random\_access\_iterator\_tag**)\
 template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type **\_\_get\_distance** (const **std::move\_iterator**\< \_Iterator \> &\_\_first, const **std::move\_iterator**\< \_Iterator \> &\_\_last)\
 template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type **\_\_get\_distance** (const **std::reverse\_iterator**\< \_Iterator \> &\_\_first, const **std::reverse\_iterator**\< \_Iterator \> &\_\_last)\
 template\<typename \_Iterator \> constexpr bool **\_\_is\_irreflexive** (\_Iterator \_\_it)\
 template\<typename \_Iterator , typename \_Pred \> constexpr bool **\_\_is\_irreflexive\_pred** (\_Iterator \_\_it, \_Pred \_\_pred)\
 template\<typename \_Iterator \> \_Iterator **\_\_unsafe** (\_Iterator \_\_it)\
 template\<typename \_Iterator , typename \_Sequence \> \_Iterator **\_\_unsafe** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence \> &\_\_it)\
 template\<typename \_Iterator , typename \_Sequence \> \_Iterator **\_\_unsafe** (const **\_Safe\_local\_iterator**\< \_Iterator, \_Sequence \> &\_\_it)\
 template\<typename \_Iterator \> constexpr auto **\_\_unsafe** (const **std::move\_iterator**\< \_Iterator \> &\_\_it) -\> decltype(std::make\_move\_iterator(\_\_unsafe(\_\_it.base())))\
 template\<typename \_Iterator \> constexpr auto **\_\_unsafe** (const **std::reverse\_iterator**\< \_Iterator \> &\_\_it) -\> decltype(std::\_\_make\_reverse\_iterator(\_\_unsafe(\_\_it.base())))\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range** (\_InputIterator \_\_first, \_InputIterator \_\_last)\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range** (\_InputIterator \_\_first, \_InputIterator \_\_last, typename \_Distance\_traits\< \_InputIterator \>::\_\_type &\_\_dist)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category \> bool **\_\_valid\_range** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &)\
 template\<typename \_Iterator , typename \_Sequence , typename \_Category \> bool **\_\_valid\_range** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, typename \_Distance\_traits\< \_Iterator \>::\_\_type &)\
 template\<typename \_Iterator , typename \_Sequence \> bool **\_\_valid\_range** (const **\_Safe\_local\_iterator**\< \_Iterator, \_Sequence \> &, const **\_Safe\_local\_iterator**\< \_Iterator, \_Sequence \> &)\
 template\<typename \_Iterator , typename \_Sequence \> bool **\_\_valid\_range** (const **\_Safe\_local\_iterator**\< \_Iterator, \_Sequence \> &, const **\_Safe\_local\_iterator**\< \_Iterator, \_Sequence \> &, typename \_Distance\_traits\< \_Iterator \>::\_\_type &)\
 template\<typename \_Iterator \> constexpr bool **\_\_valid\_range** (const **std::move\_iterator**\< \_Iterator \> &\_\_first, const **std::move\_iterator**\< \_Iterator \> &\_\_last, typename \_Distance\_traits\< \_Iterator \>::\_\_type &\_\_dist)\
 template\<typename \_Iterator \> constexpr bool **\_\_valid\_range** (const **std::reverse\_iterator**\< \_Iterator \> &\_\_first, const **std::reverse\_iterator**\< \_Iterator \> &\_\_last, typename \_Distance\_traits\< \_Iterator \>::\_\_type &\_\_dist)\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range\_aux** (\_InputIterator \_\_first, \_InputIterator \_\_last, std::\_\_false\_type)\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range\_aux** (\_InputIterator \_\_first, \_InputIterator \_\_last, **std::input\_iterator\_tag**)\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range\_aux** (\_InputIterator \_\_first, \_InputIterator \_\_last, **std::random\_access\_iterator\_tag**)\
 template\<typename \_InputIterator \> constexpr bool **\_\_valid\_range\_aux** (\_InputIterator \_\_first, \_InputIterator \_\_last, typename \_Distance\_traits\< \_InputIterator \>::\_\_type &\_\_dist, std::\_\_false\_type)\
 template\<typename \_Integral \> constexpr bool **\_\_valid\_range\_aux** (\_Integral, \_Integral, std::\_\_true\_type)\
 template\<typename \_Integral \> constexpr bool **\_\_valid\_range\_aux** (\_Integral, \_Integral, typename \_Distance\_traits\< \_Integral \>::\_\_type &\_\_dist, std::\_\_true\_type)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **std::basic\_istream**\< \_CharT, \_Traits \> & **getline** (**std::basic\_istream**\< \_CharT, \_Traits \> &\_\_is, **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_str)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **std::basic\_istream**\< \_CharT, \_Traits \> & **getline** (**std::basic\_istream**\< \_CharT, \_Traits \> &\_\_is, **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_str, \_CharT \_\_delim)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator!=** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator!=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator!=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **basic\_string**\< \_CharT, \_Traits, \_Allocator \> **operator+** (\_CharT \_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **basic\_string**\< \_CharT, \_Traits, \_Allocator \> **operator+** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **basic\_string**\< \_CharT, \_Traits, \_Allocator \> **operator+** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, \_CharT \_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **basic\_string**\< \_CharT, \_Traits, \_Allocator \> **operator+** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **basic\_string**\< \_CharT, \_Traits, \_Allocator \> **operator+** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **std::basic\_ostream**\< \_CharT, \_Traits \> & **operator\<\<** (**std::basic\_ostream**\< \_CharT, \_Traits \> &\_\_os, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_str)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<=** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\<=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator==** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator==** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator==** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>=** (const \_CharT \*\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const \_CharT \*\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> bool **operator\>=** (const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, const **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> **std::basic\_istream**\< \_CharT, \_Traits \> & **operator\>\>** (**std::basic\_istream**\< \_CharT, \_Traits \> &\_\_is, **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_str)\
 template\<typename \_CharT , typename \_Traits , typename \_Allocator \> void **swap** (**basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_lhs, **basic\_string**\< \_CharT, \_Traits, \_Allocator \> &\_\_rhs)\

## Detailed Description

GNU debug classes for public use.

## Typedef Documentation

### typedef basic\_string\<char16\_t\> \_\_gnu\_debug::u16string

A string of `char16_t`.

### typedef basic\_string\<char32\_t\> \_\_gnu\_debug::u32string

A string of `char32_t`.

## Enumeration Type Documentation

### enum \_\_gnu\_debug::\_Distance\_precision

The precision to which we can calculate the distance between two iterators.

## Function Documentation

### template\<typename \_Iterator \> constexpr \_Iterator \_\_gnu\_debug::\_\_base (\_Iterator \_\_it)` [inline]`, ` [constexpr]`

Helper function to extract base iterator of random access safe iterator in order to reduce performance impact of debug mode. Limited to random access iterator because it is the only category for which it is possible to check for correct iterators order in the \_\_valid\_range function thanks to the \< operator.

Referenced by **\_\_gnu\_debug::\_Safe\_iterator\< \_Iterator, \_Sequence, \_Category \>::\_M\_before\_dereferenceable()**.

### template\<typename \_Tp \> constexpr bool \_\_gnu\_debug::\_\_check\_singular (\_Tp \*const & \_\_ptr)` [inline]`, ` [constexpr]`

Non-NULL pointers are nonsingular.

### bool \_\_gnu\_debug::\_\_check\_singular\_aux (const \_Safe\_iterator\_base \* \_\_x)` [inline]`

Iterators that derive from \_Safe\_iterator\_base can be determined singular or non-singular.

References **\_\_gnu\_debug::\_Safe\_iterator\_base::\_M\_singular()**.

### template\<typename \_CharT , typename \_Integer \> const \_CharT \* \_\_gnu\_debug::\_\_check\_string (const \_CharT \* \_\_s, \_Integer \_\_n, const char \* \_\_file, unsigned int \_\_line, const char \* \_\_function)` [inline]`

Checks that \_\_s is non-NULL or \_\_n == 0, and then returns \_\_s.

### template\<typename \_CharT \> const \_CharT \* \_\_gnu\_debug::\_\_check\_string (const \_CharT \* \_\_s, const char \* \_\_file, unsigned int \_\_line, const char \* \_\_function)` [inline]`

Checks that \_\_s is non-NULL and then returns \_\_s.

### template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_OtherIterator , typename \_OtherSequence , typename \_OtherCategory \> bool \_\_gnu\_debug::\_\_foreign\_iterator\_aux2 (const \_Safe\_iterator\< \_Iterator, \_Sequence, \_Category \> &, const \_Safe\_iterator\< \_OtherIterator, \_OtherSequence, \_OtherCategory \> &, const \_Safe\_iterator\< \_OtherIterator, \_OtherSequence, \_OtherCategory \> &)` [inline]`

Handle debug iterators from different types of container.

### template\<typename \_Iterator , typename \_Sequence , typename \_Category , typename \_OtherIterator \> bool \_\_gnu\_debug::\_\_foreign\_iterator\_aux2 (const \_Safe\_iterator\< \_Iterator, \_Sequence, \_Category \> & \_\_it, const \_Safe\_iterator\< \_OtherIterator, \_Sequence, \_Category \> & \_\_other, const \_Safe\_iterator\< \_OtherIterator, \_Sequence, \_Category \> &)` [inline]`

Handle debug iterators from the same type of container.

### template\<typename \_Iterator \> constexpr \_Distance\_traits\< \_Iterator \>::\_\_type \_\_gnu\_debug::\_\_get\_distance (\_Iterator \_\_lhs, \_Iterator \_\_rhs, std::random\_access\_iterator\_tag)` [inline]`, ` [constexpr]`

Determine the distance between two iterators with some known precision.

### template\<typename \_InputIterator \> constexpr bool \_\_gnu\_debug::\_\_valid\_range (\_InputIterator \_\_first, \_InputIterator \_\_last, typename \_Distance\_traits\< \_InputIterator \>::\_\_type & \_\_dist)` [inline]`, ` [constexpr]`

Don't know what these iterators are, or if they are even iterators (we may get an integral type for InputIterator), so see if they are integral and pass them on to the next phase otherwise.

References **\_\_valid\_range\_aux()**.

### template\<typename \_Iterator , typename \_Sequence , typename \_Category \> bool \_\_gnu\_debug::\_\_valid\_range (const \_Safe\_iterator\< \_Iterator, \_Sequence, \_Category \> & \_\_first, const \_Safe\_iterator\< \_Iterator, \_Sequence, \_Category \> & \_\_last, typename \_Distance\_traits\< \_Iterator \>::\_\_type & \_\_dist)` [inline]`

Safe iterators know how to check if they form a valid range.

### template\<typename \_Iterator , typename \_Sequence \> bool \_\_gnu\_debug::\_\_valid\_range (const \_Safe\_local\_iterator\< \_Iterator, \_Sequence \> & \_\_first, const \_Safe\_local\_iterator\< \_Iterator, \_Sequence \> & \_\_last, typename \_Distance\_traits\< \_Iterator \>::\_\_type & \_\_dist\_info)` [inline]`

Safe local iterators know how to check if they form a valid range.

### template\<typename \_InputIterator \> constexpr bool \_\_gnu\_debug::\_\_valid\_range\_aux (\_InputIterator \_\_first, \_InputIterator \_\_last, std::\_\_false\_type)` [inline]`, ` [constexpr]`

We have iterators, so figure out what kind of iterators they are to see if we can check the range ahead of time.

References **std::\_\_iterator\_category()**, and **\_\_valid\_range\_aux()**.

### template\<typename \_Integral \> constexpr bool \_\_gnu\_debug::\_\_valid\_range\_aux (\_Integral, \_Integral, std::\_\_true\_type)` [inline]`, ` [constexpr]`

We say that integral types for a valid range, and defer to other routines to realize what to do with integral types instead of iterators.

Referenced by **\_\_valid\_range()**, and **\_\_valid\_range\_aux()**.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
