---
name: "__gnu_debug"
section: "3"
platform: "linux"
package: "gcc"
version: "16.2.1+r23+gd564253eb6c8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/__gnu_debug"
---

# \_\_gnu\_debug(3)

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.  class **type\_info**\
 Part of RTTI.

### 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\> constexpr \_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\> constexpr bool **\_\_can\_advance** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, \_Size)\
 template\<typename \_Iterator, typename \_Sequence, typename \_Category, typename \_Diff\> constexpr 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 class **\_Safe\_iterator\_base** \*)\
 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\> constexpr \_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 \_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\> constexpr \_Iterator **\_\_unsafe** (\_Iterator \_\_it)\
 template\<typename \_Iterator, typename \_Sequence\> \_Iterator **\_\_unsafe** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence \> &\_\_it)\
 template\<typename \_Iterator, typename \_UContainer\> \_Iterator **\_\_unsafe** (const **\_Safe\_local\_iterator**\< \_Iterator, \_UContainer \> &\_\_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\> constexpr bool **\_\_valid\_range** (const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &, const **\_Safe\_iterator**\< \_Iterator, \_Sequence, \_Category \> &)\
 template\<typename \_Iterator, typename \_Sequence, typename \_Category\> constexpr 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, typename \_UContainer\> bool **\_\_valid\_range** (const **\_Safe\_local\_iterator**\< \_Iterator, \_UContainer \> &\_\_first, const **\_Safe\_local\_iterator**\< \_Iterator, \_UContainer \> &\_\_last)\
 template\<typename \_Iterator, typename \_UContainer\> bool **\_\_valid\_range** (const **\_Safe\_local\_iterator**\< \_Iterator, \_UContainer \> &\_\_first, const **\_Safe\_local\_iterator**\< \_Iterator, \_UContainer \> &\_\_last, typename \_Distance\_traits\< \_Iterator \>::\_\_type &\_\_dist\_info)\
 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::input\_iterator\_tag**)\
 template\<typename \_InputIterator\> constexpr bool **\_\_valid\_range\_aux** (\_InputIterator \_\_first, \_InputIterator \_\_last, **std::random\_access\_iterator\_tag**)\
 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\> \_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\< \_Base\_iterator, map \>::\_M\_before\_dereferenceable()**.

### template\<typename \_Tp\> 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\> \_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.

References **std::make\_pair()**.

### 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\], \[constexpr\]

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

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

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

## Author

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